07_Events
来源:互联网 发布:什么是java工厂模式 编辑:程序博客网 时间:2024/06/05 02:12
转自:http://blog.yam.com/wttmama/article/33770221
接下來要說的是 Events......
如上圖…
粗略的 Event 可分為
Signal Event
Wait Event
Timer Event ( 這個又被包含在 Signal Event中 )
嚴格說來,我對這東東不大熟…真的…所以只能從 EDK 的 CODE 做說明了。
CoreCreateEvent (
IN UINT32 Type,
IN EFI_TPL NotifyTpl,
IN EFI_EVENT_NOTIFY NotifyFunction,
IN VOID *NotifyContext,
OUT EFI_EVENT *Event
)
CreateEvent 需要幾個參考。
1. Type ,它是屬於什麼種 Event ( Signal , Wait , Timer.. )
2. Tpl , Task Priority Level ,決定優先權。
3. NotifyFunction , 要執行 的 function
4. NotifyContext , 目前我的理解是要給 wait event 使用。
5. Event , Create 成功的 Event 就是放在這裡傳出去。
最後的 Event 會有這樣的結構
CreateEvent 建立一個 Event 。並依自己所規劃的進行 Trigger 。
最簡單的就是 Signal Event 。
最重要的無非是 Type
它有分 Wait , Signal , Timer 。
1. Signal Type
在 CreateEvent 內部演算法中,如果你的 Event Type 是 Signal ,那會被放入一個 gEventSignalQueue中( 透過 SignalLink 串的 )。最後回傳一個 Event 給你。
當你想 Trigger 一個 Event 時,使用 SignalEvent ( Event ),即可。
而 Event 在 SignalEvent 內部中,則會透過 NotifyLink 將 Event 串到 gEventQueu。
意思就是,它不會馬上被執行,而是排到 queue 中。
2. Wait Type
此種 Type 最後的 owner 則是使用者自己,自己必須安排何時使用這個 Event
而傳入的參數,大多也需要 Context 。
而對 Wait Event 進行檢查,則是使用 CheckEvent( Event ) , 一般來說,這種 Type 的 Event ,
它傳入的 Function 會對 Context 進行檢查。
若成功了,它內部會 SignalEvent ,它利用了 SignalEvent 裡的 SignalCount 做進階使用。
CheckEvent 若做完 Function 的查檢後,若沒成功,則會回傳 NotReady 。
3. Timer Event
這種 Type 的 Event 最後的 owner 也是使用者自己
再使用 SetTimer 進行設定。
目前知道的 Timer Event 的 Type 也是可以加上 Signal 的。但這通常會加上 Signal Function 。
不然,就純綷是在 SetTimer(Event)後透過 CheckEvent 檢查ok了沒( 也是利用 SignalCount? )。
其實,Timer Event 我也是邊打邊懂的~哈哈。
最後最後,再補充一點
有一個 Service 也是利用 Event 在做事的。就是 RegisterProtocolNotify()
它會建立一個 Signal Event 並將它與 Protocol Entry 進行關聯。
結構會變成這樣
結構上應該會更複雜,但我沒去研究。詳情請追演算法。
在實例上
KeyBoard Event 就是屬於 Wait Event ,而且是透過 WaitForEvent 來做
會和 Time Event 搭配使用。
一次學兩個。
- 07_Events
- 07
- 05/07/07
- 2009-07-07
- 2009-07-07 TIPTOP
- 10 07 07 西班牙
- 2013-07-07
- 2013-07-07 C_Language
- 2014-07-07 日记
- 07/24----07/29
- 2005.11.07
- 0:07
- 2006.05.07
- 07年
- 07_1_16
- 07Myshow
- 07级
- 09.22.07
- architecture of kernel
- 06_DXE_InstallProtocolInterface
- 提供Magento上一个和下一个产品的简单帮助(Helper)类
- 今天学了个定时执行任务
- jrtplib学习
- 07_Events
- DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC宏
- 在struts中使用checkbox实现批量删除
- 量子编程详解之一: QP-nano代码大餐之状态机函数详细注释
- “Visual C++范例大全”详细目录
- Row Level Locking in the PeopleTools Component Processor
- Makefile学习教程: 写 Makefile
- Failed to push selection: Read-only file system
- RSA公钥加密算法