--- nono/vm/uimessage.cpp 2026/04/29 17:04:59 1.1.1.1 +++ nono/vm/uimessage.cpp 2026/04/29 17:05:50 1.1.1.3 @@ -4,49 +4,44 @@ // Licensed under nono-license.txt // -#include "uimessage.h" +// +// UI スレッドへのメッセージ機構 +// -/*static*/ UIMessage::Queue UIMessage::queue {}; -/*static*/ std::function UIMessage::process {}; +#include "uimessage.h" // コンストラクタ UIMessage::UIMessage() - : UIMessage(ID::NONE, 0) { } -// コンストラクタ (ID, argあり) -UIMessage::UIMessage(ID id_, int arg_) +// デストラクタ +UIMessage::~UIMessage() { - id = id_; - arg = arg_; -} - -/*static*/ void -UIMessage::Attach(const std::function& process_) -{ - 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); + } }