Windows API—CreateEvent—创建事件
事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。事件告诉线程何时去执行某一给定的任务,从而使多个线程流平滑,CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面。 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性 BOOL bManualReset, // 复位方式 BOOL bInitialState, // 初始状态 LPCTSTR lpName // 对象名称 );
lpEventAttributes: [输入]一个指向SECURITY_ATTRIBUTES结构的指针,确定返回的句柄是否可被子进程继承。如果lpEventAttributes是NULL,此句柄不能被继承。 Windows NT/2000:lpEventAttributes的结构中的成员为新的事件指定了一个安全符。如果lpEventAttributes是NULL,事件将获得一个默认的安全符。 bManualReset: [输入]指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。 bInitialState: [输入]指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。 lpName: [输入]指定事件的对象的名称,是一个以0结束的字符串指针。名称的字符格式限定在MAX_PATH之内。名字是对大小写敏感的。 如果lpName指定的名字,与一个存在的命名的事件对象的名称相同,函数将请求EVENT_ALL_ACCESS来访问存在的对象。这时候,由于bManualReset和bInitialState参数已经在创建事件的进程中设置,这两个参数将被忽略。如果lpEventAttributes是参数不是NULL,它将确定此句柄是否可以被继承,但是其安全描述符成员将被忽略。 如果lpName为NULL,将创建一个无名的事件对象。 CEvent::SetEvent()把对象设置为有信号状态,释放等待的线程。CEvent::ResetEvent()把对象设置为无信号状态,程序在WaitForSingleObject(hHandle,INFINITE)处等待。 ? #include <iostream> #include <afx.h> #include <process.h> using namespace std; HANDLE hUp; CRITICAL_SECTION g_data; int arr[10]; HANDLE hEvent; //使用手动重置为无信号状态,初始化时有信号状态 UINT __stdcall Add(LPVOID lParam) { DWORD dReturn = WaitForSingleObject(hEvent,INFINITE); //有信号时才能得到 for (int i = 0; i<10;i++ ) { arr[i]=i;//0-9 } for (int i = 0;i < 10; i++) { cout<<arr[i]<<" "; } cout<<endl; ResetEvent(hEvent);//重置为无信号状态 return 1; } UINT __stdcall Add2(LPVOID lParam) { for (int i = 0; i<100 ;i++) { arr [i] = i+100;//10`1 } for (int i = 0;i < 10; i++) { cout<<arr[i]<<" "; } cout<<endl; SetEvent(hEvent); //MFC中,CEvent g_event; g_event.SetEvent(); return 1; } int main() { hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); hUp=(HANDLE)_beginthreadex(NULL,Add,NULL,0); hUp=(HANDLE)_beginthreadex(NULL,Add2,0); Sleep(5000); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 服务器被植入挖矿木马的心酸过程
- windows – 我在使用远程桌面时是否在看控制台?
- Windows – Linux/Unix中“性能计数器”的概念
- 错误无法在本地Windows 7 Ruby on Rails上加载’pg’gem
- windows-server-2012 – Windows Server 2012是否支持Ready
- .Net中的GPGPU编程 – Microsoft Accelerator VS OpenCL.ne
- Windows – 安装Visual Studio Community 2013时,无法将当前
- 在Windows中,如何输入Unicode基本多语言平面之外的字符?
- Windows 10上的Realm数据浏览器
- MFC注册表读写