--- nono/vm/uimessage.cpp 2026/04/29 17:05:10 1.1.1.2 +++ nono/vm/uimessage.cpp 2026/04/29 17:05:50 1.1.1.3 @@ -10,47 +10,38 @@ #include "uimessage.h" -/*static*/ UIMessage::Queue UIMessage::queue {}; -/*static*/ std::function UIMessage::process {}; - // コンストラクタ UIMessage::UIMessage() - : UIMessage(ID::NONE, 0) -{ -} - -// コンストラクタ (ID, argあり) -UIMessage::UIMessage(ID id_, int arg_) { - id = id_; - arg = arg_; } -/*static*/ void -UIMessage::Attach(const std::function& process_) +// デストラクタ +UIMessage::~UIMessage() { - process = process_; - // 溜まっているものを処理する - process(queue); } +// コールバック関数をセットして、サービスを開始。 void -UIMessage::Post() +UIMessage::StartUIMessage(const std::function& func_) { - queue.EnqueueForce(*this); - if (process) { - process(queue); - } + std::lock_guard lock(mtx); + func = func_; } -/*static*/ void -UIMessage::Post(ID id) +// サービスを停止。 +void +UIMessage::StopUIMessage() { - UIMessage(id, 0).Post(); + std::lock_guard lock(mtx); + func = std::function(); } -/*static*/ void -UIMessage::Post(ID id, int arg) +// UIMessage をポスト(実行)する。 +void +UIMessage::Post(uint id, int arg) { - UIMessage(id, arg).Post(); + std::lock_guard lock(mtx); + if ((bool)func) { + func(id, arg); + } }