Windows中多线程同步之事件(Event)
可用事件来当做同步的依据,需使用以下函数
CreatEvent():创建一个事件对象
SetEvent():把指定事件对象的状态设置为发信号状态
ResetEvent():把指定事件对象的状态设置为不发信号状态
使用机制:
和事件有关的函数有:
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,
LPTSTR lpName);
BOOL SetEvent(HANDLE hEvent);
BOOL PulseEvent(HANDLE hEvent);
BOOL ResetEvent(HANDLE hEvent);
HANDLE OpenEvent(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName );
事件对象是最常用的内核模式同步方法。它包含一个使用计数和两个BOOL变量。其中一个BOOL变量指定这个事件对象是自动重
置还是手工重置。另一个BOOL变量指定当前事件对象处于有信号状态还是无信号状态。
函数CreateEvent创建一个事件对象,参数1必须为NULL,参数2指定是否手工重新设置事件对象的状态。如果为FALSE,
当等待函数接到信号并返回后此事件对象被自动置为无信号状态。这时等待此事件对象的其它线程就不会被唤醒,因为事件对象
已经被置为无信号状态。如果参数2设置为TRUE,当等待函数接到信号并返回后事件对象不会被自动置于无信号状态,其它等待
此事件对象的线程都能够被唤醒。用ResetEvent函数可以手工将事件对象置为无信号状态。相反SetEvent函数将事件对象置为
有信号状态。PulseEvent函数将事件对象置为有信号状态,然后立即置为无信号状态,在实际开发中这个函数很少使用。
OpenEvent函数打开已经创建的事件对象,一般用于不同进程内的线程同步。在调用CreateEvent创建一个事件对象时,
传递一个名字给参数4,这样在其它进程中的线程就可以调用OpenEvent函数并指定事件对象的名字,来访问这个事件对象。事件
一般都用在线程里,当作信号灯。
总结
以上是生活随笔为你收集整理的Windows中多线程同步之事件(Event)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 在一个配置文件中联系多个数据库
- 下一篇: 服务程序增加系统托盘