线程同步----事作(Event)

来源:互联网 发布:淘宝商品编辑软件 编辑:程序博客网 时间:2024/05/19 14:36
Event 对象最大的用途,正是因为它们的状态完全在你掌控之下。Mutex 和 semaphore 就不一样了,它们的状态会因为诸如 WaitXXX( ) 之类的函数调用而变化。所以你可以精确告诉一个 event 对象做什么事,以及什么时间去做。
创建事件:
[cpp] view plaincopy
  1. HANDLE CreateEvent(  
  2.   LPSECURITY_ATTRIBUTES lpEventAttributes, // SD  
  3.   BOOL bManualReset,                       // reset type  
  4.   BOOL bInitialState,                      // initial state  
  5.   LPCTSTR lpName                           // object name  
  6. );  

bManualReset:为 FALSE,表示这个 event 将在变成激发状态之后,自动重置为非激发状态。

bManualReset:为 TRUE ,表示不会自动重置,必须靠程序操作(ResetEvent( ))才能将激发状态重置为非激发状态。

bInitialState: 为 FALSE,表示这个 event 一开始处于激发状态,如果为TRUE,表示这个event 一开始处于激发状态。

lpName: event 对象的名称。

操作事作:
[cpp] view plaincopy
  1. //把 event 对象设为激发状态  
  2. BOOL SetEvent(  
  3.   HANDLE hEvent   // handle to event  
  4. );  
  5.   
  6. //把 event 对象设为非激发状态  
  7. BOOL ResetEvent(  
  8.   HANDLE hEvent   // handle to event  
  9. );  
  10.   
  11. //如果是 Manual Reset Event:   
  12. //把 event 对象设为激发状态,唤醒"所有"等待中的线程,然后 event 恢复为非激发状态。  
  13.   
  14. //如果是 Auto Reset Event:   
  15. //把 event 对象设为激发状态,唤醒"一个"等待中的线程,然后 event 恢复为非激发状态。  
  16. BOOL PulseEvent(  
  17.   HANDLE hEvent   // handle to event object  
  18. );  
0 0
原创粉丝点击