偶数秒的WinAPI事件

时间:2018-07-09 12:10:49

标签: c++ c winapi

我需要编写一个等待系统时间的应用程序,以保持正常运行。

例如,我需要在18:00:00发生事件,然后在18:00:01等发生事件。轮询系统时钟效率很低。

当前我正在使用TimerQueueTimer,但是它只允许您等待一段时间,例如1000ms,而没有确切的时间。

2 个答案:

答案 0 :(得分:0)

假设:您不必担心抖动会跳过多少间隔。

long long time1 = 0;
long long time2;
SYSTEMTIME st;
MSG msg;
while (1) {
    GetSystemTime(&st);
    time2 = (((((long long)st.wYear) * 12 + (long long)st.wMonth) * 31 + (long long)st.wDay) * 24 + (long long)st.wHour) * 60 + (long long)st.wMinute) * 30 + (st.wSecond >> 1);
    if (time != time2) {
        /* Handle event */
        /* Will get here at the next possible CPU cycle after the clock crosses 2 seconds */
    } else {
        if (WAIT_OBJECT_0 == MsgWaitForMultipleObjects(0, NULL, FALSE, 2000 - (st.wSecond & 1) * 1000 + st.wMillisecond, QS_ALLINPUT) {
            if (!GetMessage(&msg, NULL, 0, 0)) break; /* WM_QUIT */
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
}
exit(msg.wParam);

答案 1 :(得分:-2)

我建议:

#include <time.h>

while(true){
clock_t cl = clock();
// do your things...
cl = clock()-cl;
Sleep /* or your sleep function */ (CLOCKS_PER_SEC-cl);
}

几乎100%准确