?? 16.1.1 創建事件對象 590.txt
字號:
第16章 線程同步與異步套接字編程
上一章介紹了線程同步,以及利用互斥對象實現線程同步的方法。本章將繼續介紹另兩種線程同步
的方法 :事件對象和關鍵代碼段,另外,還將介紹利用異步套接字編寫網絡應用程序的實現。
16.1 創件對象
事件對象也屬于內核對象,它包含以下三個成員:
·
使用計數:
·
用于指明該事件是一個自動重置的事件還是一個人工重置的事件的布爾值:
·
用于指明該事件處于己通知狀態還是未通知狀態的布爾值。
事件對象有兩種不同的類型:人工重置的事件對象和自動重置的事件對象。當人工重置的事件對象得
到通知時,等待該事件對象的所有線程均變為可調度線程。當一個自動重
置的事件對象得到通知時,等待該事件對象的線程中只有一個線程變為可調度線程。
16.1 .1 創建對象
在程序中可以通過 CreateEvent函數創建或打開一個命名的或匿名的事件對象,該函數的原型聲明
如下所示 :
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes ,
BOOL bManualReset ,
BOOL binitialState,
LPCTSTR lpName
該函數有四個參數,各參數含義如下所述:
. lpEventAttributes
指向 SECURITY ATTRmUTES結構體的指針。如果其值為 NULL,則使用默認的安全性。
BOOL bManualReset ,
BOOL類型,指定創建的是人工重置事件對象,還是自動重置事件對象。如果此參數為 TRUE,表示該
函數將創建一個人工重置事件對象;如果此參數為 FALSE,表示該函數將創建一個自動重置事件對
象。如果是人工重置事件對象,當線程等待到該對象的所有權之后,需要調用 ResetEvent函數手動
地將該事件對象設置為無信號狀態;如果是自動重置事件對象,當線程等到該對象的所有權之后,系
統會自動將該對象設置為無信號狀態。
. blnitialState
BOOL類型,指定事件對象的初始狀態。如果此參數值為真,那么該事件對象初始是有信號狀態 :否
則是無信號狀態。
. lpName
指定事件對象的名稱。如果此參數值為 NULL,那么將創建一個匿名的事件對象。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -