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;