1

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

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

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

我是 C++ 的菜鸟,所以这可以用 SetTimer 函数来完成吗?

谢谢 。

4

1 回答 1

9

这不是你的方式,SetTimer它基于 Windows 消息系统,并且不能在控制台应用程序中使用 box。您将需要手动创建消息泵循环并执行其他几项几乎无法满足控制台应用程序结构和控制流程的工作。

您可以改用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

于 2012-09-05T11:27:26.030 回答