From 4be6de30ab419f0b429414fe9c05370468339e55 Mon Sep 17 00:00:00 2001 From: chen0088 Date: Mon, 18 Jul 2022 09:20:33 +0800 Subject: [PATCH] fix:eventbus modify Signed-off-by: chen0088 --- utils/include/eventbus/event_bus.h | 52 ++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/utils/include/eventbus/event_bus.h b/utils/include/eventbus/event_bus.h index 4a4840d..08fc5a1 100644 --- a/utils/include/eventbus/event_bus.h +++ b/utils/include/eventbus/event_bus.h @@ -16,8 +16,11 @@ #ifndef OHOS_DISTRIBUTED_HARDWARE_EVENT_BUS_H #define OHOS_DISTRIBUTED_HARDWARE_EVENT_BUS_H +#include #include #include +#include +#include #include #include @@ -46,13 +49,32 @@ public: { ULOGI("ctor EventBus"); if (!eventbusHandler_) { - auto busRunner = OHOS::AppExecFwk::EventRunner::Create("DHEventbusHandler"); - eventbusHandler_ = std::make_shared(busRunner); + eventThread_ = std::thread(&EventBus::StartEvent, this); + std::unique_lock lock(eventMutex_); + eventCon_.wait(lock, [this] { + return eventbusHandler_ != nullptr; + }); } } + + EventBus(const std::string &threadName) + { + ULOGI("ctor EventBus threadName: %s", threadName.c_str()); + if (!eventbusHandler_) { + eventThread_ = std::thread(&EventBus::StartEventWithName, this, threadName); + std::unique_lock lock(eventMutex_); + eventCon_.wait(lock, [this] { + return eventbusHandler_ != nullptr; + }); + } + } + ~EventBus() { ULOGI("dtor EventBus"); + eventbusHandler_->GetEventRunner()->Stop(); + eventThread_.join(); + eventbusHandler_ = nullptr; } template @@ -201,6 +223,29 @@ private: } } + void StartEvent() + { + auto busRunner = AppExecFwk::EventRunner::Create(false); + { + std::lock_guard lock(eventMutex_); + eventbusHandler_ = std::make_shared(busRunner); + } + eventCon_.notify_all(); + busRunner->Run(); + } + + void StartEventWithName(const std::string &threadName) + { + prctl(PR_SET_NAME, threadName.c_str()); + auto busRunner = AppExecFwk::EventRunner::Create(false); + { + std::lock_guard lock(eventMutex_); + eventbusHandler_ = std::make_shared(busRunner); + } + eventCon_.notify_all(); + busRunner->Run(); + } + private: std::shared_ptr eventbusHandler_; @@ -208,6 +253,9 @@ private: std::mutex handlerMtx; using TypeMap = std::unordered_map> *>; TypeMap handlers; + std::thread eventThread_; + std::condition_variable eventCon_; + std::mutex eventMutex_; }; } // namespace DistributedHardware } // namespace OHOS