精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenHarmony—EventHandler源碼解析

系統 OpenHarmony
EventRunner是一種事件循環器,循環處理從該EventRunner創建的新線程的事件隊列中獲取InnerEvent事件。InnerEvent是EventHandler投遞的事件。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

EventHandler是用于處理線程間通信的一種機制,可以通過EventRunner創建新線程,將耗時的操作放到新線程上執行。這樣既不阻塞原來的線程,任務又可以得到合理的處理。比如:主線程使用EventHandler創建子線程,子線程做耗時的下載圖片操作,下載完成后,子線程通過EventHandler通知主線程,主線程再更新UI。

基本概念

EventRunner是一種事件循環器,循環處理從該EventRunner創建的新線程的事件隊列中獲取InnerEvent事件。InnerEvent是EventHandler投遞的事件。

EventHandler是一種用戶在當前線程上投遞InnerEvent事件到異步線程上處理的機制。每一個EventHandler和指定的EventRunner所創建的新線程綁定,并且該新線程內部有一個事件隊列。EventHandler可以投遞指定的InnerEvent事件到這個事件隊列。EventRunner從事件隊列里循環地取出事件,并在EventRunner所在線程執行processEvent回調。一般,EventHandler有兩個主要作用:

  • 在不同線程間分發和處理InnerEvent事件。
  • 延遲處理InnerEvent事件。

運作機制

使用EventHandler實現線程間通信的主要流程:

  1. EventHandler投遞具體的InnerEvent事件到EventRunner所創建的線程的事件隊列。
  2. EventRunner循環從事件隊列中獲取InnerEvent事件。
  3. 新線程上處理該事件:觸發InnerEvent的回調方法并觸發EventHandler的處理方法。

接口說明:

ohos.events.emitter(Emitter)

InnerEvent

進程內的事件。

EventData

發送事件時傳遞的數據。

EventPriority

用于表示事件被投遞的優先級。

代碼目錄:

foundation/
└──foundation/appexecfwk/standard
├── interfaces
├── innerkits
| └── libeventhandler # 內部接口
└── napi
└── eventhandler # NAPI接口
└──— libs/libeventhandler # 機制實現代碼

類圖:

EventRunner:

EventRunner的create方法在創建Runner線程的同時會實例化一個EventQueue,并賦值給類內部的成員變量queue_ 。 EventRunner的Runner線程輪詢queue_,取出隊列中的InnerEvent事件,并處理該事件。

EventHandler:

EventHandler的各Send方法通過調用EventQueue的Insert方法將InnerEvent插入EventQueue的subEventQueues_中 或 idleEvents__ 中。

當調用Post方法,投遞某個回調函數時,該回調函數會賦值給InnerEvent的taskCallback_,并通過Send方法將將擁有回調函數的InnerEvent插入隊列。

其中,subEventQueues_是size為3的SubEventQueue的列表,3個SubEventQueue分別用于存儲三種不同優先級(IMMEDIATE/HIGH/LOW)的InnerEvent。

idleEvents_用于存儲優先級為IDLE的InnerEvent。

同理,Remove方法即從上述subEventQueue_ 或 idleEvent_ 中刪除某事件。

EventQueue

通過成員變量 ioWaiter_ 取出定時或延時的InnerEvent事件。同時實現對文件描述符監聽事件的回調。

ioWaiter_ 成員的類型默認使用NoneIoWaiter , 此時不支持文件描述符的監聽。隊列中的延時或定時事件的取出,通過NoneIoWaiter調用 std::condition_variable機制實現。

當EventHandler中的AddFileDescriptorListener被調用時,ioWaiter_成員的類型自動轉換成EpollIoWaiter類型。EpollIoWaiter支持文件描述符的監聽事件。此時,隊列中的延時或定時事件的取出,通過系統的epoll機制實現。

關鍵代碼摘錄:

EventRunner

  // Start event looper.
for (auto event = queue_->GetEvent(); event; event = queue_->GetEvent()) { //監聽輪詢queue_
std::shared_ptr<EventHandler> handler = event->GetOwner();
// Make sure owner of the event exists.
if (handler) {
std::shared_ptr<Logger> logging = logger_;
std::stringstream address;
address << handler.get();
if (logging != nullptr) {
if (!event->HasTask()) {
logging->Log("Dispatching to handler event id = " + std::to_string(event->GetInnerEventId()));
} else {
logging->Log("Dispatching to handler event task name = " + event->GetTaskName());
}
}
handler->DistributeEvent(event); //執行aInnerEvent事件

if (logging != nullptr) {
logging->Log("Finished to handler(0x" + address.str() + ")");
}
}
// Release event manually, otherwise event will be released until next event coming.
event.reset();
}

EventQueue

void EventQueue::Insert(InnerEvent::Pointer &event, Priority priority) //事件或任務的插入
{
if (!event) {
HILOGE("Insert: Could not insert an invalid event");
return;
}
std::lock_guard<std::mutex> lock(queueLock_);
bool needNotify = false;
switch (priority) { //根據Event的優先級將該Event插入不同的事件隊列
case Priority::IMMEDIATE:
case Priority::HIGH:
case Priority::LOW: {
needNotify = (event->GetHandleTime() < wakeUpTime_);
InsertEventsLocked(subEventQueues_[static_cast<uint32_t>(priority)].queue, event);
break;
}
case Priority::IDLE: {
// Never wake up thread if insert an idle event.
InsertEventsLocked(idleEvents_, event);
break;
}
default:
break;
}
if (needNotify) {
ioWaiter_->NotifyOne();
}
}
InnerEvent::Pointer EventQueue::GetEvent()  //事件或任務的取出
{
std::unique_lock<std::mutex> lock(queueLock_);
while (!finished_) {
InnerEvent::TimePoint nextWakeUpTime = InnerEvent::TimePoint::max();
InnerEvent::Pointer event = GetExpiredEventLocked(nextWakeUpTime);
if (event) {
return event;
}
WaitUntilLocked(nextWakeUpTime, lock);
}
HILOGD("GetEvent: Break out");
return InnerEvent::Pointer(nullptr, nullptr);
}

EventHandler

void EventHandler::DistributeEvent(const InnerEvent::Pointer &event) //執行InnerEvent事件
{
if (!event) {
HILOGE("DistributeEvent: Could not distribute an invalid event");
return;
}
// Save old event handler.
std::weak_ptr<EventHandler> oldHandler = currentEventHandler;
// Save current event handler into thread local data.
currentEventHandler = shared_from_this();
auto spanId = event->GetTraceId();
auto traceId = HiTrace::GetId();
bool allowTraceOutPut = AllowHiTraceOutPut(spanId, event->HasWaiter());
if (allowTraceOutPut) {
HiTrace::SetId(*spanId);
HiTracePointerOutPut(spanId, event, "Receive", HiTraceTracepointType::HITRACE_TP_SR);
}
InnerEvent::TimePoint nowStart = InnerEvent::Clock::now();
DeliveryTimeAction(event, nowStart);
if (event->HasTask()) { //如果有回調函數
// Call task callback directly if contains a task.
(event->GetTaskCallback())(); //執行回調函數
} else {
// Otherwise let developers to handle it.
ProcessEvent(event); //執行ProcessEvent
}
DistributeTimeAction(event, nowStart);

if (allowTraceOutPut) {
HiTrace::Tracepoint(HiTraceTracepointType::HITRACE_TP_SS, *spanId, "Event Distribute over");
HiTrace::ClearId();
if (traceId.IsValid()) {
HiTrace::SetId(traceId);
}
}
// Restore current event handler.
if (oldHandler.expired()) {
currentEventHandler = nullptr;
} else {
currentEventHandler = oldHandler;
}
}

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-02-14 14:47:11

SystemUIOpenHarmon鴻蒙

2022-06-27 13:50:31

應用界面開發鴻蒙

2022-05-17 10:42:36

reboot源碼解析

2022-06-13 14:18:39

電源管理子系統耗電量服務

2021-09-16 15:08:08

鴻蒙HarmonyOS應用

2021-11-08 15:04:47

鴻蒙HarmonyOS應用

2022-02-17 20:57:07

OpenHarmon操作系統鴻蒙

2021-12-08 15:07:51

鴻蒙HarmonyOS應用

2021-11-25 09:54:54

鴻蒙HarmonyOS應用

2022-01-06 16:17:58

鴻蒙HarmonyOS應用

2021-09-18 14:40:37

鴻蒙HarmonyOS應用

2022-07-05 16:03:29

電源管理子系統鴻蒙

2021-12-17 16:42:09

鴻蒙HarmonyOS應用

2022-01-20 14:33:29

openharmonwayland協議鴻蒙

2021-09-13 15:15:18

鴻蒙HarmonyOS應用

2023-04-06 09:14:11

多模輸入子系統鴻蒙

2021-08-30 18:09:57

鴻蒙HarmonyOS應用

2023-04-12 15:31:11

系統服務管理鴻蒙

2022-07-19 20:04:31

NAPI模塊鴻蒙

2021-12-06 06:19:03

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区二区不卡| 日韩一区欧美小说| 日本乱人伦a精品| 欧美成人久久久免费播放| 国产免费区一区二区三视频免费| 亚洲一区二区在线观看视频 | 一级黄色大毛片| 欧美三区在线| 在线观看久久av| 好吊操视频这里只有精品| 周于希免费高清在线观看| 国产精品乱码一区二区三区软件| www.久久爱.cn| 夜夜爽妓女8888视频免费观看| 亚洲最大黄网| 亚洲天堂av在线免费观看| 佐山爱在线视频| 欧美三级精品| 亚洲1区2区3区4区| 日本丰满大乳奶| 电影av一区| 99视频一区二区| 91视频九色网站| 无码人妻一区二区三区免费| 亚洲一级毛片| 日韩中文字幕久久| 成人免费无遮挡无码黄漫视频| 日韩精品久久久久久久软件91| 91久久精品一区二区二区| 影音先锋成人资源网站| 久久精品蜜桃| 99精品久久久久久| 91在线观看免费高清完整版在线观看| 精品成人无码久久久久久| 亚洲欧洲午夜| 久久久午夜视频| 国产精品久久久久久久精| 欧美在线免费看视频| 日韩高清有码在线| 亚洲精品激情视频| 亚洲电影一区| 日韩精品中文字幕一区| 三级黄色片免费观看| 国产香蕉久久| 欧美日韩美少妇| 91香蕉视频污版| 蜜桃成人精品| 在线欧美日韩国产| 999在线免费视频| 裤袜国产欧美精品一区| 日韩欧美黄色动漫| 欧美污视频网站| 怡红院成人在线| 色美美综合视频| 浮妇高潮喷白浆视频| 高端美女服务在线视频播放| 午夜精品一区二区三区电影天堂| 国产黄色片免费在线观看| 欧美aaaxxxx做受视频| 夜夜精品视频一区二区| 免费视频爱爱太爽了| 9999精品成人免费毛片在线看| 亚洲综合区在线| 精品久久久久久无码中文野结衣| 波多野结衣精品| 五月婷婷综合激情| 黑森林福利视频导航| 免费观看成人性生生活片| 欧美日韩一区成人| 国产高清999| 国产精品视频3p| 精品视频在线播放| 国产性猛交xx乱| 国产精品99久久| 欧美国产第一页| av资源免费观看| 日本怡春院一区二区| 成人妇女免费播放久久久| 亚洲国产精品久久人人爱潘金莲| 成人动漫一区二区| 欧美精品与人动性物交免费看| xxxxx日韩| 亚洲伦在线观看| 天天夜碰日日摸日日澡性色av| 成人免费看黄| 欧美老人xxxx18| 一本色道久久hezyo无码| 亚洲精品播放| 久久精品视频va| 日韩伦理在线视频| 免费观看日韩电影| 动漫美女被爆操久久久| 极品美乳网红视频免费在线观看 | 久久久久久福利| 亚洲一区日本| 91精品国产综合久久香蕉最新版 | www.欧美.com| 亚洲一区二区不卡视频| 丁香花视频在线观看| 一本色道久久加勒比精品| 九九热精品国产| 在线日韩一区| 久久国产精品久久久久| 久久精品视频7| 国产精选一区二区三区| 日本午夜精品一区二区| 欧美黄色视屏| 欧美日韩国产高清一区二区三区| 国产精品边吃奶边做爽| 亚洲影视一区| 国产精品综合不卡av| 日韩毛片在线一区二区毛片| 一区二区免费在线播放| 五月婷婷丁香综合网| 欧美精品中文| 久久91精品国产91久久久| 久久久久精彩视频| 97精品国产97久久久久久久久久久久 | 无码人妻丰满熟妇区毛片18| 亚洲日本va| www.欧美精品| 欧美性猛交xxxx乱大交hd| www.在线欧美| 国产午夜精品视频一区二区三区| 丰满少妇一区| 亚洲一区第一页| 国产精品午夜影院| 成人免费视频网站在线观看| 亚洲最新免费视频| 成人自拍视频网| 亚洲精品国产品国语在线| 91日韩中文字幕| 精东粉嫩av免费一区二区三区| 欧美日韩免费高清| 亚洲私拍视频| 亚洲精品电影在线| 久久视频免费在线观看| 懂色av中文字幕一区二区三区| 黄色高清视频网站| 中文幕av一区二区三区佐山爱| 国产亚洲精品成人av久久ww| 无码人妻黑人中文字幕| 国产午夜精品一区二区三区视频| 18禁男女爽爽爽午夜网站免费| 久久国产精品色av免费看| 国内精品400部情侣激情| 亚洲男人天堂久久| 午夜不卡在线视频| www.日本高清| 免费在线亚洲| 日本不卡二区高清三区| 51一区二区三区| 最近2019中文字幕mv免费看| 一区二区www| 亚洲色图20p| 日韩精品xxx| 在线成人国产| 欧美成人dvd在线视频| 性高爱久久久久久久久| 夜夜嗨av色一区二区不卡| 中文字幕av网站| 亚洲日穴在线视频| 动漫av在线免费观看| 亚洲免费高清| 日本一区二区三区四区在线观看| 2019年精品视频自拍| 久久久精品美女| 亚洲经典一区二区| 婷婷六月综合亚洲| 公肉吊粗大爽色翁浪妇视频| 久久精品二区亚洲w码| 潘金莲一级淫片aaaaa免费看| 亚洲2区在线| 欧美孕妇与黑人孕交| 日韩三级影院| 欧美成人精品高清在线播放 | 欧美电影一区二区三区| 国产精品白嫩白嫩大学美女| 99免费精品视频| 一级在线免费视频| 欧美区亚洲区| 日韩欧美精品一区二区三区经典| 3d动漫一区二区三区在线观看| 欧美黑人巨大xxx极品| 人成免费电影一二三区在线观看| 欧美午夜精品久久久久久孕妇 | 日韩精品一区二区三区高清免费| 日产欧产美韩系列久久99| 日本在线视频www色| 久久动漫网址| 成人h视频在线| 免费高潮视频95在线观看网站| 色婷婷久久av| 性插视频在线观看| 日韩一区二区三区三四区视频在线观看 | 午夜成人免费影院| 欧美精品日韩精品| 五月婷婷亚洲综合| 亚洲欧美成人一区二区三区| 强迫凌虐淫辱の牝奴在线观看| 奇米精品一区二区三区四区| 日韩 欧美 视频| 欧美色爱综合| 好吊妞www.84com只有这里才有精品 | 久久久无码人妻精品一区| 毛片基地黄久久久久久天堂| 日本人体一区二区| 99久久99久久精品国产片桃花 | 黄色视屏网站在线免费观看| 日韩午夜av电影| 中文字幕理论片| 黑人与娇小精品av专区| 波多野结衣爱爱视频| 国产色婷婷亚洲99精品小说| 一区二区免费在线观看视频| 极品美女销魂一区二区三区| 999精品网站| 亚洲日韩成人| 国产黄色激情视频| 午夜精品毛片| 亚洲一区二区三区精品动漫| 久久不见久久见国语| 国产一区不卡在线观看| 亚洲国产欧美在线观看| 成人黄色av免费在线观看| 国产另类xxxxhd高清| 秋霞午夜一区二区| 九九精品调教| 欧美风情在线观看| 亚洲丝袜精品| 粗暴蹂躏中文一区二区三区| 国产理论电影在线观看| 亚洲欧洲在线观看| 香蕉视频国产在线| 日韩av影视综合网| 国产综合在线播放| 欧美va日韩va| 亚洲欧美黄色片| 欧美电影免费提供在线观看| 99国产精品一区二区三区| 欧美日韩成人综合在线一区二区| 正在播放木下凛凛xv99| 欧美性一区二区| 中文字幕91爱爱| 欧美精品在线一区二区三区| 中文字幕在线播放av| 欧美视频一区在线| 亚洲影视一区二区| 9191国产精品| 精品欧美一区二区精品少妇| 欧美一级久久久| www.超碰在线.com| 亚洲精品在线电影| 五月婷婷免费视频| 国产亚洲美女久久| 婷婷激情在线| 色综合91久久精品中文字幕| 久草在线资源站资源站| 97视频在线观看免费| 悠悠资源网亚洲青| 国产精品久久久av| 亚洲综合伊人| 国产精品久久精品视| 亚洲三级性片| 在线不卡视频一区二区| 欧美精品一区二区三区久久久竹菊| 国产精品videossex国产高清| 亚洲国产午夜| 男女啪啪网站视频| 国产一区二区三区香蕉| 69亚洲乱人伦| 亚洲国产成人午夜在线一区| 日韩精品123区| 亚洲国产精品久久一线不卡| 亚洲 欧美 中文字幕| 欧美日韩激情在线| 亚洲精品久久久久avwww潮水| 亚洲精品国精品久久99热一| 第九色区av在线| 久久精品99国产精品酒店日本 | 国产资源在线播放| 久久久精品国产亚洲| 牛牛精品一区二区| 91精品久久久久久久| 欧美激情久久久久久久久久久| 亚洲精品一区二区三| 黄色日韩在线| 午夜在线观看av| 成人免费av资源| 日韩一级片在线免费观看| 夜夜精品视频一区二区| 乱子伦一区二区三区| 欧美大片在线观看一区二区| 你懂得在线网址| 欧美区二区三区| 欧洲成人一区| 精品一区二区不卡| 亚洲成人最新网站| 国产裸体舞一区二区三区| 国产91露脸合集magnet| www亚洲色图| 偷拍亚洲欧洲综合| 国产免费高清视频| 亚洲丝袜av一区| 黄污视频在线观看| 国产精品视频久| 三级小说欧洲区亚洲区| 国产女人18毛片| 开心九九激情九九欧美日韩精美视频电影 | 户外露出一区二区三区| 国产麻豆乱码精品一区二区三区 | 中文字幕亚洲色图| 中文字幕在线视频久| 国产伦精品一区二区三区视频免费 | 亚洲深夜福利在线| 国产拍在线视频| 爱情岛论坛亚洲入口| 97精品视频在线看| 亚洲欧美另类动漫| 久久无码av三级| 日韩黄色在线视频| 精品国产一区二区精华| av在线free| 成人午夜在线视频一区| 成人影院在线| 手机看片福利日韩| 久久久久久亚洲综合| 日韩精品1区2区| 亚洲国产精品免费| 俺来俺也去www色在线观看| 91福利视频导航| 一区二区中文| 污免费在线观看| 亚洲欧美日韩一区二区三区在线观看| 亚洲av无码不卡| 少妇高潮久久久久久潘金莲| 色豆豆成人网| 亚洲在线色站| 麻豆视频观看网址久久| 91免费在线看片| 欧美日本韩国一区| 日本电影全部在线观看网站视频| 国产精品美女呻吟| 日韩成人精品一区二区| 中文字幕有码av| 亚洲欧美综合色| 99热这里只有精品5| 欧美成人在线免费| 伊人精品综合| 男女超爽视频免费播放| 91片黄在线观看| 最新中文字幕一区| 亚洲视频国产视频| 亚洲欧美专区| 超级碰在线观看| 成人av在线播放网址| 国产视频91在线| 亚洲图片欧美午夜| 亚洲人成777| 国产爆乳无码一区二区麻豆| 成人av免费在线播放| 国产伦精品一区二区三区视频网站| 亚洲人成欧美中文字幕| 成人在线黄色| 日本xxx免费| 成人黄色av网站在线| 狠狠人妻久久久久久综合| 国产亚洲激情视频在线| 欧美在线一级| 黄色成人在线免费观看| 久久人人97超碰com| 国产精品国产精品国产| 欧美超级乱淫片喷水| 久久精品国产亚洲5555| 99视频免费播放| 樱花影视一区二区| 亚洲 欧美 激情 另类| 国产精品视频资源| 欧美日韩在线大尺度| 欧美亚一区二区三区| 欧美久久久久免费| 538视频在线| 亚洲人成影视在线观看| 国产成人亚洲精品青草天美| 综合激情网五月| 久久五月天综合| 亚洲国产国产| 色哟哟免费视频| 色偷偷88欧美精品久久久| 91cn在线观看| 五月婷婷综合色| 成人午夜在线免费| 一本色道久久综合精品婷婷| 欧美精品福利在线| 日韩在线二区| 精品少妇一区二区三区免费观| 欧美一区二区在线免费播放| 午夜欧美巨大性欧美巨大 | 欧美一区二区三区免费在线看 | 男人舔女人下部高潮全视频|