基本介紹
- 中文名:事件佇列
- 外文名:event queue
- 涉及學科:計算機等
- 套用:Verilog等
- 意義:每個事件對應一個佇列項
- 實質:基本事件之一
事件驅動模型
- ·基本事件佇列:每個事件對應一個佇列項,每個佇列項包括一項事件句柄指針,指向該事件的事件句柄佇列;一項事件種類,它是基本事件之一;一項本事件未處理的句柄總數,說明還有多少事件等待處理;一項已處理旬柄總數,說明已經發生的事件總數。
- 事件句柄佇列:每類事件對應一個事件句柄佇列。一個句柄佇列項包括三部分,即程式句柄序列號、事件的程式句柄和事件句柄優先權。序列號區分不同通信時所對應的事件,事件句柄說明該事件發生時執行的程式首地址。
- 待執行句柄佇列:存放將要執行的事件句柄。事件句柄佇列的事件按優先權存儲在待執行佇列中。處在該佇列中的事件由沖洗程式驅動執行,一次沖洗程式的調用將企圖驅動該佇列中的全部事件的執行。
事件佇列初始化
事件驅動時機
事件句柄
Initialize the connection status to ContinueDO UNTII.all handlers in the waiting list are executed IF connection status is Stop THEN exit the function Get handler from handler list based on event priority Execute program that event handler points to,return result ENDDO |
事件沖洗
DO UNTII.all events in event queue are processedDisable all”Signals”(interrupt) IF queue buffer is in used THEN”SIGABRT”is raised Queue buffers is being checked,and set used to 1 FOR all handlers with the same sequence mark Find the sDot where this handler should go,and Shift over the lower priority slots Inserts an event to waiting execute list in non—decreasing order sorted by priority ENDFOR Set used flag to no use.and enable”Signals”(interrupt) Call "HandlerFlush" function ENDDO |
Verilog的層次化事件佇列
動態事件佇列
- 阻塞賦值;
- 計算非阻塞賦值語句右邊的表達式;
- 連續賦值;
- 執行$display命令;
- 計算原語的輸入和輸出的變化。
停止運行的事件佇列
非阻塞事件佇列
監控事件佇列
- 執行$monitor命令;
- 執行$strobe命令。
其他指定的PLI命令佇列
動態事件佇列
非阻塞賦值更新事件佇列和監控事件佇列
RunLoop的事件佇列
簡介
- 通知觀察者RunLoop已經啟動
- 通知觀察者任何即將要開啟的定時器
- 通知觀察者任何即將要啟動的非基於連線埠的事件源
- 啟動任何準備好的非基於連線埠的事件源
- 如果基於連線埠的事件源準備好並處於等待狀態, 就立即啟動, 並且進入步驟9
- 通知觀察者執行緒即將進入休眠
- 將執行緒置於休眠狀態, 直至以下事件的發生
- 某一事件到達基於連線埠的源事件
- 定時器啟動
- RunLoop設定的事件已經逾時
- RunLoop被顯式喚醒
- 通知觀察者執行緒即將被喚醒
- 處理事件
- 如果用戶定義的定時器啟動, 處理定時器事件並且重啟RunLoop, 然後進入步驟2
- 如果輸入源啟動, 傳遞回響的信息
- 如果RunLoop被現實喚醒, 並且事件還沒逾時, 重啟RunLoop, 進入步驟2
- 通知觀察者RunLoop結束
RunLoop的一般套用
- NSTimer和GCD定時器
- PerformSelector: afterDelay
- 當調用這個方法的時候, 實際內部會創建一個Timer並且添加到當前的RunLoop中, 如果當前執行緒沒有RunLoop, 這個方法也就會失效