删除计时器队列计时器

时间:2013-08-07 11:53:24

标签: c++ winapi timer

我无法正确删除我的计时器队列。我总是得到以下错误:Timer.exe中0x77a915de处的未处理异常:0xC0000005:访问冲突读取位置0x00000020。

我有一个简单的计时器回调函数:

void CALLBACK TimerProc(void* lpParameter, BOOLEAN TimerOrWaitFired)
{
    cout << "The timer is working!" << endl;
}

这是我创建和删除计时器的主要功能:

int main(int argc, char *argv[])
{
    HANDLE hTimer;

    // Create timer
    CreateTimerQueueTimer(
                            &hTimer,                         // Timer handler
                            NULL,                            // Default timerqueue
                            (WAITORTIMERCALLBACK)TimerProc,  // Callback function
                            0,                                          
                            0,
                            (DWORD)2000,                     // Period value = 2 seconds
                            WT_EXECUTEINTIMERTHREAD );

    // Do other tasks
    // e.g. Sleep(10000);

    // Delete Timer
    if ( !DeleteTimerQueueEx(hTimer, NULL) )
    {
        cout << GetLastError() << endl;
    }

    return 0;
}

调试器始终在DeleteTimerQueueEx行停止。为什么会发生这种失败?

1 个答案:

答案 0 :(得分:3)

您没有创建自己的队列(CreateTimerQueue)而是要添加到不可删除的默认计时器队列,而是删除计时器本身(DeleteTimerQueueTimer)。

如果要对多个计时器进行分组,请创建自己的队列,然后随后将其删除。