資源描述:
《NUCLUES操作系統(tǒng)消息傳遞機制(全面詳盡的解釋)》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、關于消息映射機制的幾點實習總結一、事件、消息、消息隊列和郵箱1.事件事件是可以被控件識別的操作。比如,按下一個按鈕,選擇某單選框、復選框等。事件包括系統(tǒng)事件和用戶事件。系統(tǒng)事件由系統(tǒng)激發(fā),如時間每隔24小時,銀行儲戶的存款日期增加一天。用戶事件由用戶激發(fā),如用戶點擊按鈕,在文本框中顯示特定的文本。所謂事件驅動,簡單地說就是你點什么按鈕(即產生什么事件),電腦執(zhí)行什么操作(即調用什么函數(shù)).當然事件不僅限于用戶的操作.。事件機制用于任務與任務之間、任務與ISR之間的同步。事件具有以下特點:(一)發(fā)行者確定何時引發(fā)事件,訂戶確定執(zhí)行何種操
2、作來響應該事件。(二)一個事件可以有多個訂戶。一個訂戶可處理來自多個發(fā)行者的多個事件。(三)沒有訂戶的事件永遠也不會引發(fā)。(四)事件通常用于通知用戶操作,例如,圖形用戶界面中的按鈕單擊或菜單選擇操作。(五)如果一個事件有多個訂戶,當引發(fā)該事件時,會同步調用多個事件處理程序。典型的事件操作:(一)創(chuàng)建事件集(二)刪除事件集(三)發(fā)送事件(集)(四)接收事件(集)(五)獲取有關事件集的各種信息2.消息消息:內存空間中一段長度可變的緩沖區(qū),其長度和內容均可以由用戶定義,其內容可以是實際的數(shù)據、數(shù)據塊的指針或空。對消息內容的解釋由應用完成。從
3、操作系統(tǒng)觀點看,消息沒有定義的格式,所有的消息都是字節(jié)流,沒有特定的含義。從應用觀點看,根據應用定義的消息格式,消息被解釋成特定的含義。應用可以只把消息當成一個標志,這時消息機制用于實現(xiàn)同步。3.消息隊列消息隊列可存放若干消息,提供了一種任務間緩沖通信的方法。消息機制可支持定長與可變長度兩種模式的消息,可變長度的消息隊列需要對隊列中的每一條消息增加額外的存儲開銷。典型的消息隊列操作有:(一)創(chuàng)建消息隊列(二)發(fā)送普通消息(三)發(fā)送緊急消息(四)發(fā)送廣播消息(五)接收消息(六)刪除消息隊列(七)獲取有關消息隊列的各種信息4.郵箱郵箱為任
4、務之間的通信提供一種低消耗的機制。每個郵箱可以容納控制一條消息。郵箱可以由用戶動態(tài)創(chuàng)建和刪除。一、基于MAILHUBC的消息響應機制1.MailboxC的派生類:ApplicationCApplicationManagerCDialogStackCSoftIconDisplayCGpteKeyProcessCWindowC2.有關的宏BEGIN_MAIL_MAP(ThisClass,BaseClass)END_MAIL_MAP()DECLARE_MAIL_MAP()DEFINE_TERMINATING_MAIL_MAP(ThisCla
5、ss)ON_MAIL_NOARGS(MailMsgId,MailFunc)ON_MAIL_VOIDPTR(MailMsgId,MailFunc)ON_MAIL_MSGID_VOIDPTRON_MAIL_WINDOWMAIL(MailMsgId,MailFunc)3.有關的函數(shù)MailHandlerResultTFindMailHandler(uint32MailMsgId,void*MailMsgP);4.消息映射的實現(xiàn)某個類(必須是MailboxC的繼承類)添加一個消息映射,通常我們的做法是:第一,為這個類定義一個消息,例如:#de
6、fineSMSAPP_LAUNCHAPPCAT(SMSAPP,1)第二,為這個消息定義一個映射函數(shù),如:MailHandlerResultTOnLaunchApp(void*MsgBufferP);第三,將消息與函數(shù)關聯(lián)起來,根據消息映射函數(shù)參數(shù)類型的不同,有三種方式,如下:ON_MAIL_VOIDPTR(SMSAPP_LAUNCH,SMSApplicationC::OnLaunchApp)ON_MAIL_NOARGS(VTUI_CLOSE_NOTIFY,MenuSettingDialogC::OnCloseNotify)ON_MAI
7、L_WINDOWMAIL(VTUI_MENU_ITEM_HOVERED,MenuSettingDialogC::OnMenuItemHovered)5.此外,一個類如果要實現(xiàn)消息映射機制,必須在聲明文件(.h)的尾部使用宏DECLARE_MAIL_MAP(),并在定義文件(.cpp)使用宏BEGIN_MAIL_MAP(ThisClass,BaseClass),END_MAIL_MAP(),而所有這個類的將消息映射函數(shù)與消息關聯(lián)的消息映射宏都必須包含在這個兩個宏中間。通過一個實際的例子把這些宏展開,就可以清楚地看到消息映射是如何實現(xiàn)的。
8、這些宏的定義如下:#defineDECLARE_MAIL_MAP()private:staticconstMailMapEntryTMailEntries[];protected:staticconstMailM