From bdddea9b0463dd41dc0bf9196ce3355d8bf0de63 Mon Sep 17 00:00:00 2001 From: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> Date: Thu, 28 Jul 2022 17:53:40 +0200 Subject: [PATCH] [AOT] Fix CPU consumption (#19653) Wait until object is signaled instead --- src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.cpp b/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.cpp index aae0ad2303a..9c36b7cd785 100644 --- a/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.cpp +++ b/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.cpp @@ -54,12 +54,14 @@ AlwaysOnTop::AlwaysOnTop(bool useLLKH) : AlwaysOnTop::~AlwaysOnTop() { + m_running = false; + if (m_hPinEvent) { + // Needed to unblock MsgWaitForMultipleObjects one last time + SetEvent(m_hPinEvent); CloseHandle(m_hPinEvent); } - - m_running = false; m_thread.join(); CleanUp(); @@ -280,7 +282,11 @@ void AlwaysOnTop::RegisterLLKH() MSG msg; while (m_running) { - DWORD dwEvt = MsgWaitForMultipleObjects(1, &m_hPinEvent, false, 0, QS_ALLINPUT); + DWORD dwEvt = MsgWaitForMultipleObjects(1, &m_hPinEvent, false, INFINITE, QS_ALLINPUT); + if (!m_running) + { + break; + } switch (dwEvt) { case WAIT_OBJECT_0: