关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
来源:互联网 发布:加密软件怎么破解 编辑:程序博客网 时间:2024/06/06 00:31
1 创建时间句柄:CreateEvent
HANDLE H_Event[2];
HANDLE HSignal;
H_Event[0] = ::CreateEvent(NULL,TRUE,FALSE,NULL);
H_Event[1] = ::CreateEvent(NULL,FALSE,FALSE,NULL);
HSignal = ::CreateEvent(NULL,FALSE,FALSE,NULL);
关于第二个和第三个参数的说明
第二个参数指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。
第三个参数 指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
2 WaitForSingleObject
函数第一个参数:事件句柄,
函数第二个参数: 超时时间,超时后向后执行,
如果为WSA_INFINITE 永不超时
如果为INFINITE,则为立即向后执行
只检测一个事件,如果事件有信号的话就执行, 返回的参数: WAIT_OBJECT_0 (有信号),超时:WAIT_TIMEOUT
3 WaitForMultipleObjects
//第三个参数为FALSE,表示,只要有信号就可以接着执行,
//第三个参数为TRUE,表示,只有所有事件都有信号的时候才能执行下去,
下面是代码实例:
// Waitforproject.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//#include<windef.h> //HANDLE 必须使用的头文件#include<Windows.h> //使用事件和线程必须要有的头文件。#include<iostream>using namespace std;HANDLE H_Event[2];HANDLE HSignal;DWORD WINAPI pThreadFunc(LPVOID lprama){while(1){int nIndex = ::WaitForMultipleObjects(2, H_Event,TRUE,500); //第三个参数为TRUE,表示,只有所有事件都有信号的时候才能执行下去,if(nIndex == WAIT_TIMEOUT){cout<<"Time Out"<<endl;}else if(nIndex >= WAIT_OBJECT_0 && nIndex <=WAIT_OBJECT_0+1) //就是所有事件都有信号的时候,才会执行{cout<<"ALL Event is ok " <<endl;break;}#if 0int nIndex = ::WaitForMultipleObjects(2, H_Event,FALSE,500); //第三个参数为FALSE,表示,只要有信号就可以接着执行,if(nIndex == WAIT_OBJECT_0) //第一个事件{cout<<"ONE"<<endl; //将事件的信号设置为手动退出,这样子可以做线程挂起}else if(nIndex == WAIT_OBJECT_0 +1) //第二个事件{cout<< "Break the Threa" <<endl; //将事件信号设置为自动退出 ,可以做启动线程和退出线程break;}else if(nIndex == WAIT_TIMEOUT) // {cout<<"Time OUT"<<endl; }#endif}cout<<"EXit the Thread" <<endl;return 1;}DWORD WINAPI PThreadFuncSignal(LPVOID LPrama){while (1){int nIndex = ::WaitForSingleObject(HSignal,500);if(nIndex == WAIT_OBJECT_0){cout<<"break siagnel "<<endl;break;}cout<<"Signal"<<endl;}return 1;}int _tmain(int argc, _TCHAR* argv[]){H_Event[0] = ::CreateEvent(NULL,TRUE,FALSE,NULL); H_Event[1] = ::CreateEvent(NULL,FALSE,FALSE,NULL);CreateThread(NULL,0,pThreadFunc,NULL,0,NULL); SetEvent(H_Event[0]);Sleep(3000);SetEvent(H_Event[1]);#if 0HSignal = ::CreateEvent(NULL,FALSE,FALSE,NULL);CreateThread(NULL,0,PThreadFuncSignal,NULL,0,NULL); Sleep(3000);SetEvent(HSignal);#endif#if 0/* CreatEvent 函数。第二个参数指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。第三个参数 指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。*/H_Event[0] = ::CreateEvent(NULL,TRUE,FALSE,NULL); H_Event[1] = ::CreateEvent(NULL,FALSE,FALSE,NULL);CreateThread(NULL,0,pThreadFunc,NULL,0,NULL); for(int i = 0; i<10;i++){cout<<i<<endl;Sleep(1000);if(i == 2 ){SetEvent(H_Event[0]);}else if(i == 5){ResetEvent(H_Event[0]);}}SetEvent(H_Event[1]);#endifsystem("pause:");return 0;}
2 0
- 关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
- WaitForSingleObject以及WaitForMultipleObjects 函数
- WaitForSingleObject 和 WaitForMultipleObjects函数
- WaitForSingleObject 和 WaitForMultipleObjects函数
- WaitForSingleObject 和 WaitForMultipleObjects函数
- WaitForSingleObject 和 WaitForMultipleObjects函数
- 串口 WaitForSingleObject 和 WaitForMultipleObjects函数
- WaitForSingleObject和WaitForMultipleObjects使用详解
- WaitForSingleObject和WaitForMultipleObjects使用详解
- WaitForSingleObject和WaitForMultipleObjects使用详解
- WaitForSingleObject和WaitForMultipleObjects使用详解
- WaitForSingleObject和WaitForMultipleObjects理解使用
- Sleep和WaitForSingleObject ,WaitForMultipleObjects
- Sleep和WaitForSingleObject ,WaitForMultipleObjects
- WaitForSingleObject和WaitForMultipleObjects用法
- WaitForSingleObject和 WaitForMultipleObjects
- WaitForSingleObject和WaitForMultipleObjects用法
- WaitForSingleObject 和 WaitForMultipleObjects
- kafka 使用
- 导入struts价包启动服务器报:jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servle
- xml报错-Multiple annotations found at this line
- git 分支合并
- http://blog.csdn.net/supreme42/article/details/7397241
- 关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
- C實踐項目4.1—分離各位數
- Recycle 点击事件区别 getPosition() ,getLayoutPosition(),getAdapterPosition()
- usaco wormhole(看了官方视频题解)
- SDUT 面向对象程序设计上机练习九(对象指针)
- 关于如何确定要索引的数据列以及如何正确的建立索引的一些方法
- 微信开发之Ngrok环境准备
- 微信tinker快速集成
- golang fmt.printf()