如何在控制台Win32应用程序中设置计时器

How to set a timer in a console Win32 app?

本文关键字:设置 计时器 应用程序 Win32 控制台      更新时间:2023-10-16

可能重复:
我可以在控制台c++应用中使用SetTimer()API吗

我希望在控制台win32应用程序中用c++创建一个计时器。我在谷歌上搜索了它,并找到了SetTimer()的大多数结果,但作为窗口控制或其他应用程序的例子。

我需要我的计时器来开始计数,在计时器开始后我调用一个函数,在计时器结束后,我调用另一个函数。我将使用线程。

我是c++的新手,所以这可以用SetTimer函数完成吗?

谢谢。

这不是你的方式,SetTimer基于Windows消息系统,不会在控制台应用程序中工作。您将需要手动创建消息泵送循环,并进行其他几项工作,这些工作很难满足控制台应用程序结构和控制流的要求。

您可以改为使用Waitable Timers对象。它们是专门为将线程用作同步对象而设计的。

用法示例:

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>
int main()
{
    HANDLE hTimer = NULL;
    LARGE_INTEGER liDueTime;
    liDueTime.QuadPart=-100000000;
    // Create a waitable timer.
    hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
    if (NULL == hTimer)
    {
        printf("CreateWaitableTimer failed (%d)n", GetLastError());
        return 1;
    }
    printf("Waiting for 10 seconds...n");
    // Set a timer to wait for 10 seconds.
    if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
    {
        printf("SetWaitableTimer failed (%d)n", GetLastError());
        return 2;
    }
    // Wait for the timer.
    if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
        printf("WaitForSingleObject failed (%d)n", GetLastError());
    else printf("Timer was signaled.n");
    return 0;
}

另请参阅观察Windows计时器的精彩文章:http://www.codeproject.com/Articles/1236/Timers-Tutorial