Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
根据上下文,第二个DeleteTimerQueueTimer()会生成访问冲突或无效的参数异常,或无限期挂起。 Google测试代码:
[运行] CTest.TimerQueue
未知文件:错误:在测试主体中引发了代码为0xc000000d的SEH异常。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
根据上下文,第二个DeleteTimerQueueTimer()会生成访问冲突或无效的参数异常,或无限期挂起。 Google测试代码:
HANDLE hTimer = NULL;
static VOID CALLBACK _TimerCallback(PVOID, BOOLEAN)
{
//::DeleteTimerQueueTimer(NULL, hTimer, NULL);
}
TEST(CTest, TimerQueue)
{
ASSERT_EQ(FALSE, ::DeleteTimerQueueTimer(NULL, hTimer, NULL));
ASSERT_EQ(TRUE, ::CreateTimerQueueTimer(&hTimer, NULL, &_TimerCallback, NULL, 40, 0, WT_EXECUTEONLYONCE));
ASSERT_TRUE(NULL != hTimer);
Sleep(100);
ASSERT_EQ(TRUE, ::DeleteTimerQueueTimer(NULL, hTimer, NULL));
// ******** next line produces SEH or deadlocks *************
ASSERT_EQ(FALSE, ::DeleteTimerQueueTimer(NULL, hTimer, NULL));
}
[运行] CTest.TimerQueue
未知文件:错误:在测试主体中引发了代码为0xc000000d的SEH异常。
最佳答案
MSDN说:“计时器[输入]:计时器队列计时器的句柄。该句柄由CreateTimerQueueTimer函数返回。”
您为相同的DeleteTimerQueueTimer
两次调用hTimer
。因此,在第二次调用DeleteTimerQueueTimer
时,您未遵循函数规范,因为您传递了一些无效的HANDLE
。 Windows可能(我认为应该)比SEH或挂起更好的方式来处理该问题,但是:进站,出站。
10-04 13:34