1

重複の可能性:
コンソールC ++アプリでSetTimer()APIを使用できますか

私はコンソールwin32アプリケーションでc++でタイマーを作成しようとしています。私はそれをグーグルで検索し、SetTimer()のほとんどの結果を見つけますが、例としてウィンドウコントロールなどに使用されます。

カウントを開始するにはタイマーが必要です。タイマーが開始した直後に関数を呼び出し、タイマーが終了した後、他の関数を呼び出します。スレッドを使用します。

私はC++の新人ですが、これはSetTimer関数で実行できますか?

ありがとう 。

4

1 に答える 1

9

それはあなたのやり方で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

于 2012-09-05T11:27:26.030 に答える