目錄
消息循環Message Loop
Fuchsia應用程序通過libasync-loop創建和使用消息循環Message Loop, 應用程序必須擁有Message Loop才能正常工作,比如跨進程IPC調用. 爲了描述更具體, 本文以下面這個main函數說明Message Loop的運行原理.
int main(int argc, const char** argv) {
async::Loop loop(&kAsyncLoopConfigAttachToThread);
......
loop.Run();
return 0;
}
Message Loop主要分2個庫
- libasync-loop (fuchsia/zircon/system/ulib/async-loop) 包裝和實現了消息循環Loop類
- libasync (fuchsia/zircon/system/ulib/async) 包裝和實現了異步等待Wait類
Message Loop工作原理
Message Loop的工作過程包括4個主要步驟,詳細的時序分析參考上圖
- Loop類初始化過程即main函數的
async::Loop loop(&kAsyncLoopConfigAttachToThread);
- 主線程消息循環過程即main函數的
loop.Run();
- 應用程序通過某些包裝類創建Wait實例註冊了需要等待的對象以及回調通知函數(典型的情況如FIDL IPC中等待channel對象)
- 應用程序通過某些包裝類調用了Wait的Begin開始異步等待對象上出現期望的SIGNAL並觸發回調通知