質問をする最良の方法は、最初に例を示すことです。
これは私が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);
私の質問は:それは有効ですか?次の削除関数がI/Oエラーを返す可能性があることを、MSDNで読みましたが、あまり気にする必要はありません。コールバックスレッドが自動的に署名されると、それらの終了が実行されます。
私は正しいですか?ありがとう!