| Предыдущий | Следующий |
| ERROR_WX86_ERROR | ERROR_UNWIND |
ERROR_TIMER_NOT_CANCELED
description[таймер с APC изменён из потока, который его не создавал.]Операция с таймером выполнена из неправильного потока
ERROR_TIMER_NOT_CANCELED указывает, что код попытался отменить или изменить таймер, связанный с APC, из потока, отличного от того, который изначально установил эту связь APC. Ограничение относится к владению потоком, а не только к идентификатору таймера.
Распространённые причины
- Рабочий поток создаёт таймер, а очистку выполняет координатор.
- Повторное использование потока пулом скрывает, какому потоку принадлежит состояние APC.
- Код завершения переносит отмену в другой поток.
- Объект таймера используется совместно без документирования привязки к потоку.
Диагностика
Запишите идентификаторы создавшего и вызывающего потоков, дескриптор таймера, процедуру APC и переходы жизненного цикла. Убедитесь, что создавший поток ещё существует и может выполнить очистку.
Правильная архитектура
Передавайте запрос отмены владеющему потоку через управляющую очередь или событие. Инкапсулируйте создание и уничтожение таймера в одном объекте с привязкой к потоку. Не используйте архитектуру на основе APC, если работу требуется свободно отменять из произвольных потоков.
Поведение при завершении
Не закрывайте связанные ресурсы, пока очистка владельцем не завершена. Принудительное завершение может привести к гонке обратных вызовов с уничтожением объекта.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
