win api MsgWaitForMultipleObjectsEx dwMilliseconds Как сделать что бы Milliseconds всегда выполнял обратный отсчет? он зависает а время вышло

Я использую MsgWaitForMultipleObjectsEx что бы получать в потоке сообщения и их обрабатывать. я думал что тайм аут работает всегда как обычно и для меня это важно что бы MsgWaitForMultipleObjectsEx выходила строго по определенному время но оказалось что она как вздумается иногда зависнет иногда норм отработает в доках нашел причину этого теперь не могу понять какая есть альтернатива что тайм аут всегда вел отсчет.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-msgwaitformultipleobjectsex

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 и Windows Server > 2008 R2: значение dwMilliseconds включает время, проведенное в режимах пониженного энергопотребления. Например, тайм-аут продолжает обратный отсчет, пока компьютер спит.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 и Windows Server > 2016: значение dwMilliseconds не включает время, проведенное в режимах пониженного > энергопотребления . Например, тайм-аут не отсчитывается, пока компьютер находится в спящем режиме.

использую в коде ее примерно так

        while not Terminated and not Quit do
        begin

          Ms:= MiliSecondsTimeOutWaitFor;
          log('HandleThread ms ='+ms.ToString);
          dwResult := MsgWaitForMultipleObjectsEx(1, aEvent, Ms, QS_ALLINPUT, MWMO_INPUTAVAILABLE );

          case dwResult of
            WAIT_OBJECT_0    :begin
                               Quit:=Quit;
                             end;

            WAIT_OBJECT_0 + 1:  begin PeekProcMessage; end;
            WAIT_TIMEOUT     :  begin DoTimeOutWaitFor; end;
          end;

        end;

Ответы (0 шт):