日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 什么是【事件驱动】

發(fā)布時(shí)間:2024/2/28 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 什么是【事件驱动】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事件驅(qū)動(dòng)機(jī)、消息驅(qū)動(dòng)對(duì)比

事件
按下鼠標(biāo),按下鍵盤,按下游戲手柄,將U盤插入U(xiǎn)SB接口,都將產(chǎn)生事件。比如說按下鼠標(biāo)左鍵,將產(chǎn)生鼠標(biāo)左鍵被按下的事件。

消息
當(dāng)鼠標(biāo)被按下,產(chǎn)生了鼠標(biāo)按下事件,windows偵測(cè)到這一事件的發(fā)生,隨即發(fā)出鼠標(biāo)被按下的消息到消息隊(duì)列中,這消息附帶了一系列相關(guān)的事件信息,比如鼠標(biāo)哪個(gè)鍵被按了,在哪個(gè)窗口被按的,按下點(diǎn)的坐標(biāo)是多少?如此等等。

1.要理解事件驅(qū)動(dòng)和程序,就需要與非事件驅(qū)動(dòng)的程序進(jìn)行比較。實(shí)際上,現(xiàn)代的程序大多是事件驅(qū)動(dòng)的,比如多線程的程序,肯定是事件驅(qū)動(dòng)的。早期則存在許多非事件驅(qū)動(dòng)的程序,這樣的程序,在需要等待某個(gè)條件觸發(fā)時(shí),會(huì)不斷地檢查這個(gè)條件,直到條件滿足,這是很浪費(fèi)cpu時(shí)間的。而事件驅(qū)動(dòng)的程序,則有機(jī)會(huì)釋放cpu從而進(jìn)入睡眠態(tài)(注意是有機(jī)會(huì),當(dāng)然程序也可自行決定不釋放cpu),當(dāng)事件觸發(fā)時(shí)被操作系統(tǒng)喚醒,這樣就能更加有效地使用cpu.

2.再說什么是事件驅(qū)動(dòng)的程序。一個(gè)典型的事件驅(qū)動(dòng)的程序,就是一個(gè)死循環(huán),并以一個(gè)線程的形式存在,這個(gè)死循環(huán)包括兩個(gè)部分,第一個(gè)部分是按照一定的條件接收并選擇一個(gè)要處理的事件,第二個(gè)部分就是事件的處理過程。程序的執(zhí)行過程就是選擇事件和處理事件,而當(dāng)沒有任何事件觸發(fā)時(shí),程序會(huì)因查詢事件隊(duì)列失敗而進(jìn)入睡眠狀態(tài),從而釋放cpu。

3.事件驅(qū)動(dòng)的程序,必定會(huì)直接或者間接擁有一個(gè)事件隊(duì)列,用于存儲(chǔ)未能及時(shí)處理的事件。

4.事件驅(qū)動(dòng)的程序的行為,完全受外部輸入的事件控制,所以,事件驅(qū)動(dòng)的系統(tǒng)中,存在大量這種程序,并以事件作為主要的通信方式。

5.事件驅(qū)動(dòng)的程序,還有一個(gè)最大的好處,就是可以按照一定的順序處理隊(duì)列中的事件,而這個(gè)順序則是由事件的觸發(fā)順序決定的,這一特性往往被用于保證某些過程的原子化。

6.目前windows,linux,nucleus,vxworks都是事件驅(qū)動(dòng)的,只有一些單片機(jī)可能是非事件驅(qū)動(dòng)的。

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

總結(jié)

以上是生活随笔為你收集整理的C# 什么是【事件驱动】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。