複製鏈接
請複製以下鏈接發送給好友

事件驅動

(計算機領域的事件驅動)

鎖定
事件驅動是指在持續事務管理過程中,進行決策的一種策略,即跟隨當前時間點上出現的事件,調動可用資源,執行相關任務,使不斷出現的問題得以解決,防止事務堆積。在計算機編程、公共關係、經濟活動等領域均有應用。
中文名
事件驅動
外文名
Event-driven
概    述
在持續事務管理過程中
事件驅動
所謂事件驅動,簡單地
基金股票領域
事件驅動型基金主要通

目錄

事件驅動解釋

所謂事件驅動,簡單地説就是你點什麼按鈕(即產生什麼事件),電腦執行什麼操作(即調用什麼函數).當然事件不僅限於用户的操作. 事件驅動的核心自然是事件。從事件角度説,事件驅動程序的基本結構是由一個事件收集器、一個事件發送器和一個事件處理器組成。事件收集器專門負責收集所有事件,包括來自用户的(如鼠標、鍵盤事件等)、來自硬件的(如時鐘事件等)和來自軟件的(如操作系統、應用程序本身等)。事件發送器負責將收集器收集到的事件分發到目標對象中。事件處理器做具體的事件響應工作,它往往要到實現階段才完全確定,因而需要運用虛函數機制(函數名往往取為類似於HandleMsg的一個名字)。對於框架的使用者來説,他們能夠看到的是事件處理器。這也是他們所關心的內容。
視圖(即我們通常所説的“窗口”)是“事件驅動”應用程序的另一個要元。它是我們所説的事件發送器的目標對象。視圖接受事件並能夠對其進行處理。當我們將事件發送到具體的視圖時,實際上我們完成了一個根本性的變化:從傳統的流線型程序結構到事件觸發方式的轉變。這樣應用程序具備相當的柔性,可以應付種種離散的、隨機的事件。
由於Windows本身是基於“事件驅動”模型的。因而在Windows操作系統下實現應用程序框架有相當的便利。在事件驅動程序的基本單元中,事件收集器已經由Windows系統完成;事件發送器也已經由Windows完成了部分內容。之所以是部分而非完全是因為Windows是用C語言實現的,而不是C++。由於沒有對象,Windows將事件發送到所謂的“窗口函數”中(儘管不是發送到具體的對象,但應該説這是面向對象方式實現的一個變體)。要感謝Windows做了這件事。確定事件的目標所要做的工作的複雜可能要超出我們的想象。
wxWidgets的中所有可以處理事件的類都繼承自wxEvtHandler,其中包含frames,buttons,menus,even documents,所有的窗體類(即從wxWindow繼承的類)和程序類(application class)
這些類可以有一個事件表,用來綁定事件和被調用的函數(handler functions)
過程 3.2. 建立一個靜態事件表(即編譯時生成的事件表)的操作步驟
建立一個新類(直接或間接從wxEvtHandler繼承)
為每個要處理的事件聲明被調用的函數
在被處理的事件所在的類的聲明中加入宏DECLARE_EVENT_TABLE
在宏BEGIN_EVENT_TABLE... END_EVENT_TABLE(就是事件表)中將函數與枚舉的數字綁定(因為產生該類型的事件的按鈕可以任意一個,要用枚舉數來區分);有些事件不必與枚舉數綁定,因為產生該類型的事件的對象可以確定(比如就是this)。

事件驅動例子

例 3.1. 一個事件表
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU (wxID_ABOUT,MyFrame::OnAbout)
EVT_MENU (wxID_EⅪT,MyFrame::OnQuit)
EVT_SIZE (MyFrame::OnSize)
//不必與枚舉數綁定,因為產生該類型的事件的對象是this
EVT_BUTTON (wxID_OK,MyFrame::OnButtonOK)
END_EVENT_TABLE( )
在事件中指定被綁定的數字,wxWidgets會將其映射到對應的函數,並調用函數
所有在事件表中被綁定的函數有相似的形式:返回值都是void,不是virtual函數,參數為wxCommandEvent類型