Если у меня есть приложение, которое создает потоки, которые выполняют свою работу и затем завершают свою работу, и один или несколько потоков попадают в тупик (возможно, не по моей вине!), Есть ли способ программно принудить одного из потоки для продвижения за объектом WaitForSingleObject, в котором он может застрять, и, таким образом, устранение тупика?
Я не хочу прерывать поток, я просто хочу, чтобы он продолжался (и, таким образом, позволял потокам выходить "изящно".
(да, я знаю, это звучит как дубликат моего предыдущего вопроса Delphi 2006 - Какой лучший способ изящно убить поток и при этом запустить обработчик OnTerminate? , но ситуация немного отличается - здесь я спрашиваю, можно ли заставить WaitForSingleObject (Handle, INFINTE)
вести себя как WaitForSingleObject (Handle, ItCantPossiblyBeWorkingProperlyAfterThisLong)
).
Пожалуйста, будь осторожен со мной.
* ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ *
Проблема не обязательно в коде, источник которого у меня есть. Фактическая ситуация - это библиотека последовательных COM-портов ( AsyncFree ), основанная на потоках. Когда порт основан на USB, библиотека, кажется, имеет тупик между двумя потоками, которые она создает при закрытии порта. Я уже обсуждал это подробно в этом форуме . Я перекодировал один из вызовов WaitForSingleObject, чтобы он не был бесконечным, и это вылечило эту тупиковую ситуацию, но затем другой появился позже в последовательности отключения потока, на этот раз в подпрограмме Delphi TThread.Destroy.
Итак, мое объяснение этому простое: когда мои потоки зашли в тупик, я исправлю код, если смогу. Если я не могу или появляется сообщение, о котором я не знаю, я просто хочу, чтобы нить закончилась. Я не должен быть красивым. Я не могу позволить, чтобы мое приложение задохнулось.