事件驅動機制和訊息驅動機制

2021-09-05 12:39:19 字數 1137 閱讀 2071

事件:按下滑鼠,按下鍵盤,按下遊戲手柄,將u盤插入usb介面,都將產生事件。比如說按下滑鼠左鍵,將產生滑鼠左鍵被按下的事件。

訊息:當滑鼠被按下,產生了滑鼠按下事件,windows偵測到這一事件的發生,隨即發出滑鼠被按下的訊息到訊息佇列中,這訊息附帶了一系列相關的事件資訊,比如滑鼠哪個鍵被按了,在哪個視窗被按的,按下點的座標是多少?如此等等。

1、要理解事件驅動和程式,就需要與非事件驅動的程式進行比較。實際上,現代的程式大多是事件驅動的,比如多執行緒的程式,肯定是事件驅動的。早期則存在許多非事件驅動的程式,這樣的程式,在需要等待某個條件觸發時,會不斷地檢查這個條件,直到條件滿足,這是很浪費cpu時間的。而事件驅動的程式,則有機會釋放cpu從而進入睡眠態(注意是有機會,當然程式也可自行決定不釋放cpu),當事件觸發時被作業系統喚醒,這樣就能更加有效地使用cpu。

2、再說什麼是事件驅動的程式。乙個典型的事件驅動的程式,就是乙個死迴圈,並以乙個執行緒的形式存在,這個死迴圈包括兩個部分,第乙個部分是按照一定的條件接收並選擇乙個要處理的事件,第二個部分就是事件的處理過程。程式的執行過程就是選擇事件和處理事件,而當沒有任何事件觸發時,程式會因查詢事件佇列失敗而進入睡眠狀態,從而釋放cpu。

3、事件驅動的程式,必定會直接或者間接擁有乙個事件佇列,用於儲存未能及時處理的事件。

4、事件驅動的程式的行為,完全受外部輸入的事件控制,所以,事件驅動的系統中,存在大量這種程式,並以事件作為主要的通訊方式。

5、事件驅動的程式,還有乙個最大的好處,就是可以按照一定的順序處理佇列中的事件,而這個順序則是由事件的觸發順序決定的,這一特性往往被用於保證某些過程的原子化。

6、目前windows,linux,nucleus,vxworks都是事件驅動的,只有一些微控制器可能是非事件驅動的。

事件模式耦合高,同模組內好用;訊息模式耦合低,跨模組好用。事件模式整合其它語言比較繁瑣,訊息模式整合其他語言比較輕鬆。事件是侵入式設計,霸佔你的主迴圈;訊息是非侵入式設計,將主迴圈該怎樣設計的自由留給使用者。如果你在設計乙個東西舉棋不定,那麼你可以參考win32的getmessage,本身就是乙個藕合度極低的介面,又足夠自由,介面任何語言都很方便,具體應用場景再在其基礎上封裝成事件並不是難事,介面耦合較低,即便哪天事件框架調整,修改外層即可,不會傷經動骨。而如果直接實現成事件,那就完全反過來了。

C 事件驅動機制

用事件驅動還處理資料,你用了就會知道他的好處的。為了給大家看清事件驅動原理,我用小例子來說明 1.建立事件 public class alarmstateeventargs eventargs set 2宣告乙個委託的型別 public delegate void netservereventhan...

詳解事件驅動跟訊息驅動機制相比

事件驅動和非同步io 通常,我們寫伺服器處理模型的程式時,有以下幾種模型 1 每收到乙個請求,建立乙個新的程序,來處理該請求 2 每收到乙個請求,建立乙個新的執行緒,來處理該請求 3 每收到乙個請求,放入乙個事件列表,讓主程序通過非阻塞i o方式來處理請求 上面的幾種方式,各有千秋,第 1 中方法,...

設計模式學習之訊息驅動機制

訊息驅動機制,也叫觀察者模式 事件驅動模式。不論是在應用還是遊戲中,都是一種常見的設計模式,該設計模式非常利於模組的解耦。我們這裡以老師和學生為例,有乙個老師和多個學生,老師發的每乙個訊息,學生都要能夠收到。如 老師說,明天我們放假,然後確保所有學生都能收到該訊息。首先,建立乙個訊息分發中心,負責收...