Я только что реализовал пул потоков, как описано здесь
Аллен Бауэр на пулах потоков
Очень простая реализация, работает нормально, но мое приложение больше не закрывается. Кажется, что два рабочих потока (и еще один поток, я думаю, поток очередей) застряли в функции
ntdll.ZwRemoveIoCompletion
Я помню, что читал что-то о завершениях ввода-вывода в записи справки для QueueUserWorkItem (функция WinAPI, используемая в реализации пула потоков), но я не мог понять это правильно. Я использовал WT_EXECUTELONGFUNCTION для моих рабочих потоков, так как выполнение может занять некоторое время, и я хочу, чтобы новый рабочий поток был создан вместо ожидания завершения существующих. Некоторые задачи, назначенные рабочим потокам, выполняют некоторые операции ввода-вывода. Я пытался использовать WT_EXECUTEINIOTHREAD, но, похоже, это не помогло.
Следует отметить, что основной поток ожидает входа в критическую секцию, причем стек вызовов равен
.
System.Halt0, System.FinalizeUnits, Classes.Finalization, TThread.Destroy,
RtlEnterCriticalSection, RtlpWaitForCriticalSection
Есть идеи, что я здесь делаю не так? Заранее спасибо за помощь.