Функция 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, функция помечает таймер для удаления и немедленно возвращает его. Если срок действия таймера уже истек, функция обратного вызова таймера будет выполняться до завершения. Однако уведомление о завершении функции обратного вызова таймера не отправляется. Большинство вызывающих абонентов не должны использовать этот параметр и должны ждать завершения выполняемых функций обратного вызова таймера, чтобы они могли выполнить необходимую очистку.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError. Если код ошибки ERROR_IO_PENDING, повторно вызывать эту функцию не нужно. Для любой другой ошибки следует повторить вызов.
Комментарии
Эту функцию нельзя вызвать, когда поток использует олицетворение. Результирующее поведение не определено.
При вызове этой функции из обратного вызова таймера другого таймера можно задать для параметра CompletionEventзначение INVALID_HANDLE_VALUE , если функция обратного вызова не выполняется в потоке таймера. Однако взаимоблокировка может возникнуть, если две функции обратного вызова попытаются заблокировать вызов DeleteTimerQueueTimer на таймерах друг друга. Кроме того, вы не можете выполнить блокирующий вызов удаления для таймера, связанного с обратным вызовом.
Будьте внимательны при выполнении блокирующего вызова DeleteTimerQueueTimer в постоянном потоке. Если удаляемый таймер был создан с WT_EXECUTEINPERSISTENTTHREAD, может возникнуть взаимоблокировка.
Если имеются незавершенные функции обратного вызова, а свойство CompletionEvent равно NULL, функция завершится ошибкой и присвоит коду ошибки значение ERROR_IO_PENDING. Это означает, что существуют невыполненные функции обратного вызова. Эти обратные вызовы будут выполняться или находятся в середине выполнения. Таймер очищается после завершения выполнения функции обратного вызова.
Чтобы отменить все таймеры в очереди таймера, вызовите функцию DeleteTimerQueueEx .
Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0500 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | threadpoollegacyapiset.h |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |