提出问题的最好方法是先举一个例子:
这就是我在 C++ 中创建计时器的方式:
if (FALSE == CreateTimerQueueTimer(&m_hSampleStarvationTimer,
m_hSampleStarvationTimerQueue,
(WAITORTIMERCALLBACK)TsSampleStarvationTimeBomb_Static,
(LPVOID)this,
dwDueTime,
0,
WT_EXECUTEONLYONCE))
一旦触发了以下回调(TsSampleStarvationTimeBomb_Static),我会尝试杀死该特定线程内的队列句柄和计时器句柄。
void CALLBACK CCaptureChannel::TsSampleStarvationTimeBomb_Static(LPVOID lpArg, BOOLEAN TimerOrWaitFired)
{
HRESULT hr;
BOOL bHandleDeletion = FALSE;
CCaptureChannel* pCaptureChannel = (CCaptureChannel*)lpArg;
ATLASSERT(pCaptureChannel);
bHandleDeletion = DeleteTimerQueueTimer(pCaptureChannel->m_hSampleStarvationTimerQueue, pCaptureChannel->m_hSampleStarvationTimer, NULL);
bHandleDeletion = DeleteTimerQueue(pCaptureChannel->m_hSampleStarvationTimerQueue);
我的问题是:它有效吗?我在 MSDN 上阅读了以下删除函数可能会返回 i/o 错误,这不应该让我太担心。一旦回调线程被签名,它们的终止将自动执行。
我对吗?谢谢!