DeleteTimerQueueTimer 関数 (threadpoollegacyapiset.h)
タイマー キューからタイマーを削除し、必要に応じて、タイマーを削除する前に、現在実行中のタイマー コールバック関数が完了するまで待機します。
構文
BOOL DeleteTimerQueueTimer(
[in, optional] HANDLE TimerQueue,
[in] HANDLE Timer,
[in, optional] HANDLE CompletionEvent
);
パラメーター
[in, optional] TimerQueue
タイマー キューへのハンドル。 このハンドルは、 CreateTimerQueue 関数によって返されます。
タイマーが既定のタイマー キューを使用して作成された場合、このパラメーターは NULL である必要があります。
[in] Timer
タイマー キュー タイマーのハンドル。 このハンドルは、 CreateTimerQueueTimer 関数によって返されます。
[in, optional] CompletionEvent
システムがタイマーを取り消し、すべてのコールバック関数が完了したときに通知されるイベント オブジェクトへのハンドル。 このパラメーターは、NULL でもかまいません。
このパラメーターが INVALID_HANDLE_VALUEされている場合、関数は実行中のタイマー コールバック関数が完了するまで待機してから、 を返します。
このパラメーターが NULL の場合、関数はタイマーに削除のマークを付け、直ちにを返します。 タイマーの有効期限が既に切れている場合、タイマー コールバック関数は完了まで実行されます。 ただし、タイマー コールバック関数が完了したときに通知は送信されません。 ほとんどの呼び出し元は、このオプションを使用しないでください。必要なクリーンアップを実行できるように、タイマー コールバック関数の実行が完了するまで待つ必要があります。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 エラー コードが ERROR_IO_PENDING場合は、この関数を再度呼び出す必要はありません。 その他のエラーが発生した場合は、呼び出しを再試行する必要があります。
注釈
スレッドが偽装を使用している間は、この関数を呼び出すことはできません。 結果の動作は未定義です。
コールバック関数がタイマー スレッドで実行されない限り、別のタイマーのタイマー コールバック内からこの関数を呼び出すときに、CompletionEvent を INVALID_HANDLE_VALUE に設定できます。 ただし、2 つのコールバック関数が互いのタイマーで DeleteTimerQueueTimer 呼び出しをブロックしようとすると、デッドロックが発生する可能性があります。 さらに、コールバックに関連付けられているタイマーでブロック削除呼び出しを行うことはできません。
永続的なスレッドでブロッキング DeleteTimerQueueTimer 呼び出しを行う場合は注意してください。 削除中のタイマーが WT_EXECUTEINPERSISTENTTHREADで作成された場合は、デッドロックが発生する可能性があります。
未処理のコールバック関数があり、 CompletionEvent が NULL の場合、関数は失敗し、エラー コードを ERROR_IO_PENDING に設定します。 これは、未処理のコールバック関数があることを示します。 これらのコールバックは、実行されるか、実行中です。 コールバック関数の実行が完了すると、タイマーがクリーンアップされます。
タイマー キュー内のすべてのタイマーを取り消すには、 DeleteTimerQueueEx 関数を呼び出します。
この関数を使用するアプリケーションをコンパイルするには、 _WIN32_WINNT を 0x0500 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | threadpoollegacyapiset.h |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |