摘要:本文主要向大家介绍了VC编程之vc++多线程编程,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
本文主要向大家介绍了VC编程之vc++多线程编程,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
1.CWinApp是一个i额用户界面线程对象,派生自CWinThread,处理用户产生的事件和消息。
MFC
2.AfxBeginThread函数创建和初始化CWinThread对象,启动并返回地址。
3.
pThread = new CWinThread();
pThread->m_bAutoDelete = FALSE;
pThread = AfxBeginThread(StartAndCloseThreadProc, NULL);
4.
挂起线程
pThread->SuspendThread();
重新启动线程
pThread->ResumeThread();
5.
线程的同步
11.事件对象
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "process.h"
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
int iGolbalCount=0;
int iMax = 12;
HANDLE hEvent;
int main(int argc, char* argv[])
{
HANDLE hThread1, hThread2;
hEvent=CreateEvent(NULL,FALSE,FALSE,LPCTSTR("iGolbalCount"));
if (hEvent == NULL)
{
printf("创建事件对象失败!\r\n");
return 0;
}
SetEvent(hEvent);
hThread1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
Sleep(40000);
CloseHandle(hEvent); //关闭事件对象句柄
printf("主线程结束!\n");
system("pause");
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
while (TRUE)
{
WaitForSingleObject(hEvent,INFINITE);
if (iGolbalCount < iMax)
{
printf("这里是线程1,iGolbalCount=%d\r\n", iGolbalCount++);
SetEvent(hEvent);
}
else
{
SetEvent(hEvent);
break;
}
Sleep(10);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(hEvent,INFINITE);
if (iGolbalCount < iMax)
{
printf("这里是线程2,iGolbalCount=%d\r\n", iGolbalCount++);
SetEvent(hEvent);
}
else
{
SetEvent(hEvent);
break;
}
Sleep(10);
}
return 0;
}
22.利用临界区
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
int iGolbalCount=0;
int iMax = 12;
CRITICAL_SECTION cs;
int main(int argc, char* argv[])
{
HANDLE hThread1, hThread2;
InitializeCriticalSection(&cs);
hThread1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
Sleep(50000);
DeleteCriticalSection(&cs); //删除临界区对象
printf("主线程结束!\n");
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
while (TRUE)
{
EnterCriticalSection(&cs);
if (iGolbalCount < iMax)
{
printf("这里是线程1,iGolbalCount=%d\r\n", iGolbalCount++);
LeaveCriticalSection(&cs);
}
else
{
LeaveCriticalSection(&cs);
break;
}
Sleep(10);
}
return 0;
}
33.利用信号量
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
int iGolbalCount=0;
int iMax = 12;
int cMax = 1;
HANDLE hSemaphore;
int main(int argc, char* argv[])
{
HANDLE hThread1, hThread2;
hSemaphore = CreateSemaphore( NULL, cMax, cMax, NULL);
if (hSemaphore == NULL)
{
printf("创建信号量对象失败");
return 0;
}
hThread1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
Sleep(5000);
printf("主线程结束!");
system("pause");
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
while (TRUE)
{
DWORD dwWaitResult = WaitForSingleObject(hSemaphore, 0L);
if (dwWaitResult == WAIT_OBJECT_0)
{
if (iGolbalCount < iMax)
{
printf("这里是线程1,iGolbalCount=%d\r\n", iGolbalCount++);
ReleaseSemaphore(hSemaphore, 1, NULL);
}
else
{
ReleaseSemaphore(hSemaphore, 1, NULL);
break;
}
}
Sleep(10);
}
return 0;
}
44.利用互斥对象
DWORD WINAPI ThreadProc1(LPVOID lpParam);
DWORD WINAPI ThreadProc2(LPVOID lpParam);
int iGolbalCount=0;
int iMax = 12;
HANDLE hMutex;
int main(int argc, char* argv[])
{
HANDLE hThread1, hThread2;
hThread1=CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
hMutex=CreateMutex(NULL,TRUE,LPCTSTR("iGolbalCount"));
if (hMutex == NULL)
{
printf("创建互斥对象失败!\r\n");
return 0;
}
WaitForSingleObject(hMutex,INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(5000);
printf("主线程结束!\n");
return 0;
}
DWORD WINAPI ThreadProc1(LPVOID lpParam)
{
while (TRUE)
{
WaitForSingleObject(hMutex,INFINITE);
if (iGolbalCount < iMax)
printf("这里是线程1,iGolbalCount=%d\r\n", iGolbalCount++);
else
break;
ReleaseMutex(hMutex);
Sleep(10);
}
return 0;
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号