談 自動事件 和 手工事件 的區別

2021-06-20 10:00:23 字數 1005 閱讀 6159

原帖及討論:

自動事件 和 手工事件 的型別均為 cevent 類,只是第二個引數上有區別:

自動事件:cevent eventobj;  等效於 eventobj(false,false)

手工事件物件定義方法 cevent eventobj(false,true);

注:cevent 其實由四個引數的,可參考msdn

以下通過乙個具體示例,說明自動事件 和 手工事件的區別:

// 在檢視區新增以下**:

uint messagethread1(lpvoid pparam)

uint messagethread2(lpvoid pparam)

uint messagethread3(lpvoid)

void cmfcexp12_3view::onlbuttondown(uint nflags, cpoint point)

然後您就能看到程式在定義乘 eventobj(false,false) 和 cevent eventobj(false,true)時的明顯區別:

選擇自動事件:每次只能喚醒乙個事件

具體表現:按下四次右鍵,依次顯示 thread1 is unblocked、thread2 is unblocked、

thread1 is unblocked again和thread2 is unblocked again

選擇手工事件:則eventobj.setevent()能喚醒所有被掛起的執行緒,使恢復執行

並且一旦使用eventobj.setevent()設定成「發信狀態」後就一直處於有效狀態,除非使用成員物件

pulseevent或resetevent把它重新設定為「未發現狀態」,因此手動物件用來恢復多個等待狀態的執行緒

具體表現:按下右鍵後,不但顯示了 thread1 is unblocked和thread2 is unblocked ,

而且顯示 thread1 is unblocked again和thread2 is unblocked again

附完整**(附件)

事件繫結和事件委託區別

靜態繫結,也是最直接的事件繫結 通過事件屬性,直接顯示的給元素繫結事件,例如 該方式缺點 當頁面多元素都要新增事件時,定義繁瑣。函式名稱定義改變,一次要修改兩個地方。動態繫結 關於事件監聽的適配 因為ie 有自己的事件監聽 attachevent 和detachevent 分別用於事件監聽 obtn...

事件繫結和普通事件的區別

普通新增事件的方法 var btn document.getelementbyid hello btn.onclick function btn.onclick function 執行上面的 只會alert 2 事件繫結方式新增事件 var btn document.getelementbyid h...

事件繫結和普通事件的區別

普通新增事件的方法 var btn document.getelementbyid hello btn.onclick function btn.onclick function 執行上面的 只會alert 2 事件繫結方式新增事件 var btn document.getelementbyid h...