我无法正确删除我的计时器队列。我总是收到以下错误: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/