c++ - 删除定时器-队列定时器

标签 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 行停止。为什么会出现这种故障?

最佳答案

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

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

关于c++ - 删除定时器-队列定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102711/

相关文章:

c++ - 调整大小时如何强制窗口保持一定的宽度/高度比

c++ - 使用继承修复大型类

c# - API 调用的 SafeProcessHandle 和 IntPtr 之间的区别

c++ - 通过加入现有 QHash 来初始化 const QHash

c++ - 如何在 ListView win32 api 中删除指针

java - 在 Java 中为标签设置定时器

ANDROID:是否可以创建一个数据库并每 100 秒在其中保存一些信息

python - 线程.定时器类型错误: an integer is required

c++ - DoublyLinkedList 删除错误

c++ - C++ 中非常快速的近似对数(自然对数)函数?