事件驅動機制跟消息驅動機制相比


事件:按下鼠標,按下鍵盤,按下游戲手柄,將U盤插入USB接口,都將產生事件。比如說按下鼠標左鍵,將產生鼠標左鍵被按下的事件。
 消息:當鼠標被按下,產生了鼠標按下事件,windows偵測到這一事件的發生,隨即發出鼠標被按下的消息到消息隊列中,這消息附帶了一系列相關的事件信息,比如鼠標哪個鍵被按了,在哪個窗口被按的,按下點的坐標是多少?如此等等。
 
1.要理解事件驅動和程序,就需要與非事件驅動的程序進行比較。實際上,現代的程序大多是事件驅動的, 比如多線程的程序,肯定是事件驅動的早期則存在許多非事件驅動的程序,這樣的程序,在需要等待某個條件觸發時,會不斷地檢查這個條件,直到條件滿足,這是很浪費cpu時間的。而 事件驅動的程序,則有機會釋放cpu從而進入睡眠態(注意是有機會,當然程序也可自行決定不釋放cpu), 當事件觸發時被操作系統喚醒,這樣就能更加有效地使用cpu.
2.再說什么是事件驅動的程序。 一個典型的事件驅動的程序,就是一個死循環,並以一個線程的形式存在,這個 死循環包括兩個部分第一個部分是按照一定的條件接收並選擇一個要處理的事件,第二個部分就是 事件的處理過程。程序的執行過程就是 選擇事件和處理事件,而當 沒有任何事件觸發時,程序會 因查詢事件隊列失敗而進入睡眠狀態,從而釋放cpu。
3.事件驅動的程序, 必定會直接或者間接擁有一個事件隊列用於存儲未能及時處理的事件
4.事件驅動的程序的行為, 完全受外部輸入的事件控制,所以,事件驅動的系統中,存在大量這種程序,並以事件作為主要的通信方式。
5.事件驅動的程序, 還有一個最大的好處,就是可以按照一定的順序處理隊列中的事件,而這個順序則是由事件的觸發順序決定的,這一特性往往被用於保證某些過程的原子化。
6.目前windows,linux,nucleus,vxworks都是事件驅動的,只有一些單片機可能是非事件驅動的。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM