VC CEvent類的介紹(手工重置 自動重置)

2021-06-18 14:18:22 字數 1995 閱讀 2215

cevent類的乙個物件,表示乙個「事件」——乙個允許乙個事件發生時執行緒通知另乙個執行緒的同步物件。在乙個執行緒需要了解何時執行任務時,事件是十分有用的。例如,拷貝資料到資料文件時,執行緒應被通知何時資料是可用的。當新資料可用時,通過運用cevent物件來通知拷貝執行緒,執行緒才可能盡快地執行。例如在某些網路應用程式中,乙個執行緒(記為a)負責監聽通訊埠,另乙個執行緒(記為b)負責更新使用者資料。通過使用cevent類,執行緒a可以通知執行緒b何時更新使用者資料,這樣執行緒b可以盡快地更新使用者資料。cevent物件有兩種型別:自動和手工。乙個手工cevent物件存在於由resetevent或setevent設定的狀態中,直到另乙個函式被呼叫。乙個自動cevent物件在至少乙個執行緒被釋放後自動返回乙個無標記(無用的)狀態。

要使用乙個cevent物件,應在需要時構造乙個cevent物件。指定要等待的事件,應用應擁有它,就可以在建構函式返回時訪問事件。呼叫setevent標記(使可用)事件物件,然後當訪問完控制資源時,呼叫unlock函式。

另乙個使用cevent物件的方法是新增乙個cevent型別的變數,使之成為希望控制的類的乙個資料成員。在控制物件被構造期間,可呼叫cevent資料成員的建構函式,它指明時間是否是最初就被標記、需要的事件物件型別、事件名稱(如果在程序中要使用)和所希望的安全屬性。

cevent類的建構函式原型如下:cevent(

boolbinitiallyown/*=false*/,//用來指定事件物件初始狀態是否為發信狀態(預設值為未發信)

boolbmanualreset/*=false*/,//用來指定建立的事件物件是自動事件還是手動事件物件(預設值為自動事件物件)

lpctstrlpszname/*=null*/,//用來定義事件物件的名稱lpsecurity_attributeslpsaattribute/*=null*///指向乙個lpsecurity_attributes結構的指標)

cevent類提供的三種方法

setevent()//設定事件為發信狀態,並釋放其他正在等待的執行緒pulseevent()//設定事件為發信狀態,並釋放其他正在等待的執行緒,然後把事件設定為未發信狀態resetevent()//設定事件為未發信狀態1.自動事件物件

如果使用cevent類建構函式的預設引數值的話,則定義的物件為自動事件物件。初始狀態為未發信狀態,可以用setevent使之變為發信狀態,等待執行緒中的第乙個執行緒恢復執行,但事件物件會隨即自動將其變為未發信狀態,從而使其他處於等待狀態的執行緒仍然被阻塞。就是說,自動事件物件一次只能啟動乙個處於等待狀態的執行緒。

示例:乙個應用程式,當使用者在程式視窗上按下滑鼠左鍵時,會建立和啟動兩個執行緒,這兩個執行緒被啟動後,各自顯示乙個資訊框,表明執行緒已被啟動,隨即被事件物件的lock函式把執行緒掛起。當使用者在程式視窗按下滑鼠右鍵時,啟動另乙個執行緒,在該執行緒中把事件物件

置為「發信」狀態,從而啟動了第乙個被掛起的執行緒。

1.新建單文件程式;

2.在檢視類的實現檔案中定義乙個全域性事件物件:ceventevent obj;

3.在檢視類的實現檔案編寫如下執行緒函式:

uintmessagethread1(lpvoid pparam)

uintmessagethread2(lpvoi***aram)

uintmessagethread3(lpvoi***aram)

4.檢視類的滑鼠響應訊息如下:

voidcthreadtestview::onlbuttondown(uintnflags,cpointpoint)

voidcthreadtestview::onrbuttondown(uintnflags,cpointpoint)

2.手工事件物件

手工事件物件一旦用函式setevent設定為「發信」狀態,就一直處於有效狀態,除非又使用物件的成員函式pulseevent或resetevent把它重新設定為「未發信」狀態。所以手工事件

物件被用來恢復多個處在等待狀態執行緒的執行。

示例:把上面的例子的事件物件定義為手工事件物件,然後執行該程式。修改為下面**:

//把定義事件物件的**改為ceventevent obj(false,true);

重定位的介紹

1 鏈結位址和執行位址 1 鏈結位址 2 執行位址在位置相關碼執行前,需要把 拷貝到以鏈結位址為起始位址的空間裡,然後通過跳轉語句,跳轉到以鏈結位址為起始位址的 的相應的位置繼續執行。3 舉例 2 重定位 1 在執行位址處執行一段位置無關碼,把整個程式映象拷貝乙份到鏈結位址處,然後使用長跳轉指令從執...

python類的介紹 Python 類的介紹

如何建立類 class 類名 pass eg class bar 定義乙個類 def foo self,arg self 永遠是呼叫方法的物件,即中間人 print self,self.name,self.age,arg obj bar 使用 bar 類,建立乙個物件 obj print obj o...

OC類的介紹

類的本質 1,類也是個物件 其實類也是乙個物件,是class型別的物件,簡稱 類物件 class型別的定義 typedef struct objc class class 類名就代表著類物件,每個類只有乙個類物件 2,獲取類物件的2種方式 1 class c person class 2 perso...