Windows執行緒同步之事件 Event

2021-10-17 03:22:27 字數 2746 閱讀 1230

設定為有訊號狀態setevent()

設定為無訊號狀態resetevent()

傳送訊號脈衝pulseevent()

開啟已存在的命名物件openevent()

關閉事件物件closeevent()

等待訊號為有訊號或超時waitforsingleobject()

建立或開啟事件物件createevent()

event是windows的核心物件之一,不僅可以實現單個程序中的執行緒之間的同步,還可以實現多個程序中的執行緒同步。主要通過事件物件的有訊號狀態和無訊號狀態的變換來實現。

createevent的作用是windows中建立或開啟乙個命名或無名的事件物件。

handle winapi createevent(

_in_opt_ lpsecurity_attributes lpeventattributes,

_in_         bool     bmanualreset,

_in_         bool     binitialstate,

_in_opt_  lpctstr lpname

);引數一:指向lpsecurity_attributes結構的指標。如果這個引數為null,則這個handle不能被子程序所繼承。

引數二:如果這個引數為true則建立乙個手動復位的事件物件,需要使用resetevent把事件從有訊號狀態恢復為

無訊號狀態。如果引數為false,則會建立乙個自動復位的事件物件,當訊號被乙個等待執行緒釋放時,系

統會自動將其從有訊號狀態復位為無訊號狀態。

引數三:如果為true,則事件物件初始化為有訊號狀態,否則為無訊號狀態。

引數四:事件物件的名字,是乙個長度不超過max_path的字串,名字對大小寫敏感。引數如果與乙個已經存在

的事件物件同名,則函式請求event_all_accss訪問已存在的事件物件,由於第二個和第三個引數已經再

建立事件的程序中被設定,則忽略這兩個引數,如果第乙個引數不為null,則確認其handle是否可以被

繼承,但是其成員lpsecuritydescriptor將被忽略。如果第四個引數為空,則建立乙個無名事件物件。

如果第四個引數與其它同一空間的其他物件同名,例如semaphone,mutex,job等,則會出錯,呼叫

getlasterror函式會返回error_invalid_handle,發生錯誤的原因是他們在同一共享空間。

返回值:成功則返回乙個事件物件的控制代碼,如果對於命名的事件物件,建立之前已存在則返回已存在的物件的控制代碼,呼叫getlasterror返回error_already_exists。如果失敗則返回null。

closehandle函式是關閉開啟的物件handle

bool closehandle(handle hobject);

引數:開啟的物件handle

返回值:成功返回非零值,失敗返回零值。

setevent函式設定createevent建立的事件物件的狀態為有訊號狀態。

bool setevent(handle hevent);

引數:createevent返回的事件物件handle。

返回值:成功返回非零值,失敗返回零值。

resetevent函式設定createevent建立的事件物件的狀態為無訊號狀態

bool resetevent(handle hevent);

引數:createevent返回的事件物件的handle。

返回值:成功返回非零值,失敗返回零值。

pulseevent函式傳送乙個訊號脈衝,先把時間物件的狀態設定為有訊號狀態,然後恢復為無訊號狀態。

bool pulseevent()

返回值:成功返回非零值,失敗返回零值。

openevent函式的作用是開啟乙個已經存在的命名事件物件。

handle openevent(

dword dwdesciredaccess,

bool binherithandle,

lpctstr lpname

)引數一:對事件物件的訪問許可權,作業系統支援物件安全,如果請求訪問的進行沒有許可權訪問事件物件的安全許可權則會失敗。一般設定為event_all_access。

引數二:事件控制代碼的繼承性。

引數三:訪問的事件物件名稱,保證不同程序可以訪問同乙個事件物件。

返回值:被開啟的事件handl

waitforsingleobject函式阻塞程序或執行緒當物件為有訊號狀態或者超時是返回。

dword waitforsingleobject(

handle hhandle,

dword dwmilliseconds

)引數一:物件handle可以指定一系列的物件。

引數二:設定的等待時間,當時間到達時事件仍為無訊號狀態,則函式超時返回。如果設定為infinite時則會一

直等待直到被觸發為有訊號狀態。

返回值:wait_object_0表示物件被設定為有訊號狀態。wait_timeout表示等待超時返回。wait_failed表示發

生錯誤。

執行緒同步之事件物件

執行緒同步 讓執行緒協同步調,按照一定的先後次序來執行 當人工重置的事件得到通知時,等待該事件的所有執行緒均變為可排程執行緒。當乙個自動重置的事件得到通知時,等待該事件的執行緒中只有乙個執行緒變為可排程執行緒。參考 多執行緒與事件物件 多執行緒程式設計 13 多執行緒同步之 event 事件物件 i...

執行緒同步之事件機制基礎使用

void myreceivechar void comstat commstat 這個結構體主要是用來獲取埠資訊的 handle hlocevent dword dwerror dword dwmask dword dwlength dword dwbytereaded dword i uint8 ...

VC之 執行緒同步之事件物件 Event

事件物件也是核心物件,它也包含三個成員 使用計數 指明事件是自動重置事件還是乙個人工重置事件的布林值 指明事件是處於已通知狀態還是處於未通知狀態。人工重置的事件物件 當人工重置的事件物件得到通知時,等待該事件物件的所有執行緒均變為可排程執行緒。在擁有事件物件的所有權之後要呼叫resetevent函式...