|
创建多线程函数
- HANDLE CreateThread(
- [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全,一般都设置为NULL
- [in] SIZE_T dwStackSize, //线程大小,设置为1M的倍数,比如1024,如果不满足会向上取整
- [in] LPTHREAD_START_ROUTINE lpStartAddress, //线程执行函数
- [in, optional] __drv_aliasesMem LPVOID lpParameter, //线程执行函数的参数,一个空指针,可以传递任何数据。
- [in] DWORD dwCreationFlags, //执行方式,0:创建后立即执行,CREATE_SUSPENDED:创建之后挂起,等待唤醒执行。
- [out, optional] LPDWORD lpThreadId //指向接收线程标识符的变量的指针
- );
复制代码 使用案列
- DWORD threadHandle01, threadHandle02;
- CreateThread(NULL,1024,(LPTHREAD_START_ROUTINE)ThreadProceeFun1,&a,0,&threadHandle01);
- CreateThread(NULL, 1024, (LPTHREAD_START_ROUTINE)ThreadProceeFun2, NULL, 0, &threadHandle02);
复制代码- DWORD ThreadProceeFun1(LPVOID lpParam)
- DWORD ThreadProceeFun2(LPVOID lpParam)
复制代码 互斥
创建互斥:
- HANDLE g_Mutex = CreateMutex(NULL,FALSE,L"001");
复制代码
等待获取互斥信号
- WaitForSingleObject(g_Mutex, INFINITE);
复制代码 执行完毕之后释放互斥信号
当多线程拥有对共享变量的访问权限时,这些函数执行原子加法可确保成功完成操作。
- InterlockedAdd、InterlockedIncrement、InterlockedDecrement等一系列函数
复制代码
多线程事件通信
- HANDLE g_EventHandle;
- DWORD ThreadProceeFun1(LPVOID lpParam) {
-
- while (true)
- {
- WaitForSingleObject(g_EventHandle, INFINITE); //阻塞获取信号
- ResetEvent(g_EventHandle); //复位事件,变成无信号
- cout << "---------" << endl;
- }
- return 0;
- }
- DWORD ThreadProceeFun2(LPVOID lpParam) {
- while (true)
- {
- Sleep(1000);
- SetEvent(g_EventHandle);//触发事件,设置为有信号。
- }
- return 0;
- }
复制代码
- g_EventHandle = CreateEvent(NULL,TRUE,TRUE,NULL);
复制代码
CreateEvent
参数一:安全等级
参数二:手动true或者自动false复原信号
参数三:初始化状态,true表示有信号
参数四:事件名称,可以为NULL
|
|