我需要编写一个应用程序,等待系统时间,甚至是秒。
例如,我需要在 18:00:00 发生一个事件,下一个事件在 18:00:01 等。轮询系统时钟的效率很低。
目前我正在使用 TimerQueueTimer,但它只允许您等待一段时间,例如 1000 毫秒,而不是确切的时间。
最佳答案
假设:您不关心抖动跳过了多少时间间隔。
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);
关于c++ - 偶数秒的 WinAPI 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51245304/