我需要编写一个等待系统时间的应用程序,以保持正常运行。
例如,我需要在18:00:00发生事件,然后在18:00:01等发生事件。轮询系统时钟效率很低。
当前我正在使用TimerQueueTimer,但是它只允许您等待一段时间,例如1000ms,而没有确切的时间。
答案 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%准确