事件是WIN32提供的最灵活的线程间同步方式,根据状态变迁方式不同,可分为手动设置和自动恢复两类
手动设置:这种对象只可能用程序手动设置,在需要该事件或者事件发生时,采用SetEvent及ResetEvent来进行设置
自动恢复:一旦事件发生并被处理后,自动恢复到没有事件的状态,不需要再次设置。
相关API函数:
CreateEvent//创建事件对象
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性,确定返回的句柄是否可被子进程继承,设置为NULL则此句柄不能被继承
BOOL bManualReset,// 复位方式,指定将事件对象创建成手动复原还是自动复原,如果是TRUE,
//那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当一个线程
//等待到事件信号后系统会自动将事件状态复原为无信号状态。
BOOL bInitialState,// 初始状态,指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
LPCTSTR lpName // 对象名称,指定事件的对象的名称,是一个以0结束的字符串指针,NULL表示匿名事件
);
成功返回事件对象句柄,如果创建已有事件对象,那么返回已经存在的事件句柄,GetLastError也会设置为ERROR_ALREADY_EXISTS,失败返回NULL
SetEvent()把指定事件对象的状态设置为有信号状态
BOOL SetEvent(HANDLE hEvent);//hEvent表示事件句柄
成功返回TRUE
ResetEvent();把指定的事件对象设置为无信号状态
BOOL ResetEvent(HANDLE hEvent);//hEvent表示事件句柄
成功返回TRUE
事件可以用来实现进程只有一个实例
原文:https://www.cnblogs.com/liu6666/p/12727786.html