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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在一个配置文件中联系多个数据库
- 下一篇: java信息管理系统总结_java实现科