From 1dab244aaad8694ba37ef43caedd8c8ba0310c00 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 5 Nov 2018 20:54:48 +0800 Subject: ... --- src/application.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/application.cpp') diff --git a/src/application.cpp b/src/application.cpp index 2adab7c6..7be56f56 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -1,7 +1,5 @@ #include "application.h" -#include - #include "exception.h" #include "timer.h" #include "ui/window.h" @@ -58,17 +56,20 @@ namespace cru { { case invoke_later_message_id: { - const auto p_action = reinterpret_cast(w_param); + const auto p_action = reinterpret_cast*>(w_param); (*p_action)(); delete p_action; return 0; } case WM_TIMER: { - const auto action = application_->GetTimerManager()->GetAction(static_cast(w_param)); - if (action) + const auto id = static_cast(w_param); + const auto action = application_->GetTimerManager()->GetAction(id); + if (action.has_value()) { - (*action)(); + (action.value().second)(); + if (!action.value().first) + Application::GetInstance()->GetTimerManager()->KillTimer(id); return 0; } break; @@ -159,9 +160,9 @@ namespace cru { ::PostQuitMessage(quit_code); } - void InvokeLater(InvokeLaterAction&& action) { + void InvokeLater(const std::function& action) { //copy the action to a safe place - auto p_action_copy = new InvokeLaterAction(std::move(action)); + auto p_action_copy = new std::function(action); if (PostMessageW(Application::GetInstance()->GetGodWindow()->GetHandle(), invoke_later_message_id, reinterpret_cast(p_action_copy), 0) == 0) throw Win32Error(::GetLastError(), "InvokeLater failed to post message."); -- cgit v1.2.3