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

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

事件驅動是指在持續事務管理過程中,進行決策的一種策略,即跟隨當前時間點上出現的事件,調動可用資源,執行相關任務,使不斷出現的問題得以解決,防止事務堆積。在計算機編程、公共關係、經濟活動等領域均有套用。

基本介紹

  • 中文名:事件驅動
  • 概述 :在持續事務管理過程中
  • 事件驅動:所謂事件驅動,簡單地
  • 基金股票領域:事件驅動型基金主要通
所謂事件驅動,簡單地說就是你點什麼按鈕(即產生什麼事件),電腦執行什麼操作(即調用什麼函式).當然事件不僅限於用戶的操作. 事件驅動的核心自然是事件。從事件角度說,事件驅動程式的基本結構是由一個事件收集器、一個事件傳送器和一個事件處理器組成。事件收集器專門負責收集所有事件,包括來自用戶的(如滑鼠、鍵盤事件等)、來自硬體的(如時鐘事件等)和來自軟體的(如作業系統、應用程式本身等)。事件傳送器負責將收集器收集到的事件分發到目標對象中。事件處理器做具體的事件回響工作,它往往要到實現階段才完全確定,因而需要運用虛函式機制(函式名往往取為類似於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類型

相關詞條

熱門詞條

聯絡我們