c++ - 偶数秒的 WinAPI 事件

标签 c++ c winapi

我需要编写一个应用程序,等待系统时间,甚至是秒。

例如,我需要在 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/

相关文章:

c++ - 通过引用或值返回类的大数据成员

c++ - 傅里叶变换规划期间的访问冲突

c - 为什么 fgets() 和 strncmp() 在此 C 代码中无法用于字符串比较?

winapi - 如何将 IFileDialog 与 FOS_PICKFOLDER 一起使用,同时仍在对话框中显示文件名

windows - 让我的 MFC 对话框在其控件之前接收击键事件(MFC/Win32 相当于 WinForms "KeyPreview")

java - 从 C++ JNI 获取 Java 类中的实例变量

c++ - 调用重写的方法而不是直接的父亲

c - 空指针赋值错误

c - 为什么在 Ubuntu 中按方向键时终端显示 "^[[A" "^[[B" "^[[C" "^[[D"?

c++ - 暂停低级 Hook 的最佳方法(winapi)