日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Event事件控制

發布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Event事件控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事件對象就像一個開關:它只有兩種狀態---開和關。當一個事件處于”開”狀態,我們稱其為”有信號”否則稱為”無信號”。可以在一個線程的執行函數中創建一個事件對象,然后觀察它的狀態,如果是”無信號”就讓該線程睡眠,這樣該線程占用的CPU時間就比較少。
產生事件對象的函數如下: ?
HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes, // SD BOOL bManualReset, // reset type BOOL bInitialState, // initial state LPCTSTR lpName // object name ); 該函數創建一個Event同步對象,如果CreateEvent調用成功的話,會返回新生成的對象的句柄,否則返回NULL。

參數說明:
? ? lpEventAttributes ? ? 一般為NULL
? ? bManualReset ? ? ? ? ?創建的Event是自動復位還是人工復位.如果true,人工復位,一旦該Event被設置為有信號,則它一直會等到ResetEvent()API被調用時才會恢復為無信號.如果為false,Event被設置為有信號,則當有一個wait到它的Thread時,該Event就會自動復位,變成無信號.如果想 在每次調用WaitForSingleObject后讓WINDOWS為您自動地把事件地狀態恢復為”無信號”狀態,必須把該參數設為FALSE,否則,您必須每次調用ResetEvent函數來清除事件的信號。
? ? bInitialState ? ? ? ? 初始狀態,true,有信號,false無信號 ??
? ? lpName ? ? ? ? ? ? ? ?事件對象的名稱。您在OpenEvent函數中可能使用。

注釋:
? ? 一個Event被創建以后,可以用OpenEvent()API來獲得它的Handle,用CloseHandle() ? ?來關閉它,用SetEvent()或PulseEvent()來設置它使其有信號,用ResetEvent()來使其無信號,用WaitForSingleObject()或WaitForMultipleObjects()來等待其變為有信號. PulseEvent()是一個比較有意思的使用方法,正如這個API的名字,它使一個Event 對象的狀態發生一次脈沖變化,從無信號變成有信號再變成無信號,而整個操作是原子的.對自動復位的Event對象,它僅釋放第一個等到該事件的thread(如果有),而對于人工復位的Event對象,它釋放所有等待的thread.
這里有兩個API函數用來修改事件對象的信號狀態:SetEvent和ResetEvent。前者把事件對象設為”有信號”狀態,而后者正好相反。?
在事件對象生成后,必須調用WaitForSingleObject來讓線程進入等待狀態,該函數的語法如下: ?
WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD ?
hObject -->指向同步對象的指針。事件對象其實是同步對象的一種。?
dwTimeout --> 等待同步對象變成”有信號”前等待的時間,以毫秒計。當等待的時間超過該值后無信號同步對象仍處于”無信號”狀態,線程不再等待, WaitForSingleObject函數會返回。如果想要線程一直等待,請把該參數設為INFINITE(該值等于0xffffffff)。

總結

以上是生活随笔為你收集整理的Event事件控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。