线程同步之事件(Event)

您所在的位置:网站首页 线程同步作用 线程同步之事件(Event)

线程同步之事件(Event)

2024-07-10 01:37| 来源: 网络整理| 查看: 265

1.事件

事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false)。根据状态变迁方式的不同,事件可分为两类: (1)手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent来进行设置。 (2)自动恢复:一旦事件发生并被处理后,自动恢复到没有事件状态,不需要再次设置。

使用”事件”机制应注意以下事项: (1)如果跨进程访问事件,必须对事件命名,在对事件命名的时候,要注意不要与系统命名空间中的其它全局命名对象冲突; (2)事件是否要自动恢复; (3)事件的初始状态设置。

由于event对象属于内核对象,故进程B可以调用OpenEvent函数通过对象的名字获得进程A中event对象的句柄,然后将这个句柄用于ResetEvent、SetEvent和WaitForMultipleObjects等函数中。此法可以实现一个进程的线程控制另一进程中线程的运行,例如:

HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent"); ResetEvent(hEvent); 2.使用

事件的处理方式和临界区相似。

HANDLE hEvent; //1.定义事件句柄 hEvent = CreateEvent(NULL, false, true, (LPCTSTR)"event"); //2.创建事件 WaitForSingleObject(hEvent, INFINITE); //3.等待对象为有信号状态 SetEvent(hEvent); 3.实例 #include #include using namespace std; int number = 1; HANDLE hEvent;//定义事件句柄 unsigned long __stdcall ThreadProc1(void* lp) { while (number < 100) { WaitForSingleObject(hEvent, INFINITE); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3