难道可以sendmessage:WM_TIMER?
在 SetTimer中hwnd参数是NULL啊,不解中……

解决方案 »

  1.   

    就是知道没窗口消息才问啊
    初步想法是用一个线程来标记时间,或者用CALLBACK实现调用??
    那位给个具体的实现方法吧
      

  2.   

    Using Waitable Timer Objects
    The following example creates a timer that will be signaled after a 10 second delay. First, the code uses the CreateWaitableTimer function to create a waitable timer object. Then it uses the SetWaitableTimer function to set the timer. The code uses the WaitForSingleObject function to determine when the timer has been signaled. #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 (!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;
    }
      

  3.   

    Using Timer QueuesThe following example creates a timer routine that will be executed by a timer-queue thread after a 10 second delay. First, the code uses the CreateEvent function to create an event object that is signaled when the timer-queue thread completes. Then it creates a timer queue and a timer-queue timer, using the CreateTimerQueue and CreateTimerQueueTimer functions, respectively. The code uses the WaitForSingleObject function to determine when the timer routine has completed. Finally, the code calls DeleteTimerQueue to clean up.
    For more information on the timer routine, see WaitOrTimerCallback.#include <windows.h>
    #include <stdio.h>HANDLE gDoneEvent;VOID CALLBACK TimerRoutine(PVOID lpParam, BOOL TimerOrWaitFired)
    {
        if (lpParam == NULL)
        {
            printf("TimerRoutine lpParam is NULL\n");
        }
        else
        {
            // lpParam points to the argument; in this case it is an int        printf("Timer routine called. Parameter is %d.\n", 
                    *(int*)lpParam);
        }    SetEvent(gDoneEvent);
    }int main()
    {
        HANDLE hTimer = NULL;
        HANDLE hTimerQueue = NULL;
        int arg = 123;    // Use an event object to track the TimerRoutine execution
        gDoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
        if (!gDoneEvent)
        {
            printf("CreateEvent failed (%d)\n", GetLastError());
            return 1;
        }    // Create the timer queue.
        hTimerQueue = CreateTimerQueue();
        if (!hTimerQueue)
        {
            printf("CreateTimerQueue failed (%d)\n", GetLastError());
            return 2;
        }    // Set a timer to call the timer routine in 10 seconds.
        if (!CreateTimerQueueTimer(
            &hTimer, hTimerQueue, TimerRoutine, &arg , 10000, 0, 0))
        {
            printf("CreateTimerQueueTimer failed (%d)\n", GetLastError());
            return 3;
        }    // TODO: Do other useful work here     printf("Call timer routine in 10 seconds...\n");    // Wait for the timer-queue thread to complete using an event 
        // object. The thread will signal the event at that time.    if (WaitForSingleObject(gDoneEvent, INFINITE) != WAIT_OBJECT_0)
            printf("WaitForSingleObject failed (%d)\n", GetLastError());    // Delete all timers in the timer queue.
        if (!DeleteTimerQueue(hTimerQueue))
            printf("DeleteTimerQueue failed (%d)\n", GetLastError());    return 0;
    }