1 事件結構及它的圖形化表示法
事件被用來通知用戶有異步活動發生。圖形化語言的事件響應包括:用戶界面事件、外部I/O事件和程序其它部分的事件。
對事件的處理程序也被稱為:事件驅動程序。事件驅動程序可以分為若干個分支,每個分支處理不同的事件響應。所以對事件的響應結果也可以控制程序的流程。
事件驅動機制來自于可視化的操系統,可視化操作系統對用戶事件提供了簡潔、有效的響應方式,最常見的事件來自于鼠標和鍵盤。
虛擬儀器借助于操作系統的事件處理機制實現了圖形化語言的事件響應能力。在沒有引入事件結構之前,LabVIEW是借助于輪詢的方式來查詢用戶操作,由于輪詢的方式會占用一定的CPU資源,甚至可能遺漏事件,所以這種處理方式并非理想。事件結構的出現避免了對CPU資源的占用,同時也避免了事件的遺漏。
事件結構在函數選板》編程》結構子選板中可以找到,并可以將其直接拖拽到程序框圖中,圖形化表示的事件結構,參見下圖。
圖 1 圖形化的事件結構
與Case結構和循環結構類似,事件結構也包含了一個主框架,這個框架內將用來放置事件處理的事件驅動程序代碼。如果事件處理任務眾多,會有眾多事件分支存在,在結構上類似Case的多幀結構(選擇器標簽)。
當在程序框圖上拖放一個事件結構時,我們只能看到上圖所示的一幀已經預先注冊的超時事件(Timeout),超時事件分支。它具有定時延遲的基本功能(不包括While循環),參見下圖。
圖 2具有定時延遲的基本功能
當然也可以采用另一種表示方法,參見下圖。
圖 3利用事件結構內部節點獲得中止時間
通過這個例子也好理解內部節點中“時間”的含義(是事件響應的停止時間)。
超時事件
超時事件是一種特殊的事件,當然也可以看成是默認的事件分支。如果存在其它事件源時,超時事件完全可以被忽略或取消。看下面一個例子。
圖 4僅有的兩個事件之一——超時事件
圖 5僅有的兩個事件之一——“停止”鼠標按下
這個例子運行狀況是這樣的:程序運行后進入超時事件,等待5秒鐘后,在字符串顯示器中顯示:“嗨。。。5秒鐘內,用戶沒有操作!”(標志超時事件已經結束)。然后一直等待用戶操作,當用戶點擊停止按鍵后,程序停下來,同時顯示:“哈哈,終于響應了。”
為了響應多個事件的請求,所以要求在事件結構外面套加一個While循環。以便能夠及時準確的響應每個事件。
5.6.2 事件結構的數據流運行機制
從數據流的運行機制來看,事件可以理解為多個無定序的數據源。事件的響應處理過程是根據事件發生的先后順序,依次進行處理。而事件的處理過程仍然是依據數據流運行機制的。
所謂多個無定序的數據源是指:事件發生是隨機的,它們之間沒有固定的時間或先后順序關系。
事件結構的運行機制是一個一個的處理事件,這樣就要求在事件處理程序上要求:簡單快速執行,避免事件處理過程中產生不必要的堆積。
下面通過一個例子來進一步理解事件結構中需要注意的一些問題。
例 5-14 事件處理的演示
在例子程序的前面版中,我們放置了四個控件。門——布爾控件表示一個門(鼠標點擊相當于敲門);敲門次數——控件用來紀錄事件的次數;停止——布爾控件用來停止演示程序的運行;其中還有一個門把手裝飾用控件。
下面我們在具體看看它的程序框圖。
圖 6 例5-14的程序框圖(僅包含兩個事件源)
評論