|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Завершение потоков
Каким образом можно "гуманно" завершить работу потока (объекта TThread), находящегося в состоянии Suspended, при вызове терминатора признак "завершенный" ставится в 1, но поток продолжает свое существование, пока не закончит цикл в Execute (а там функция которая в блокирующем режиме работает).
Конечно TerminateThread спасает, но это уж как-то очень грубо. Да и к тому же поток может быть приостановлен с EIP находящимся внутри некой ф-ии, где открыты какие-то хендлы, при таком прибивании хендлы так и останутся висеть? (глобальный менеджер хендлов поди нужен) — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 13.07.2012 в 13:22. |
#2
|
||||
|
||||
а что за функция в блокирующем режиме которая работает? Overlapped не поддерживает?
можно сначала вызвать Resume и Terminate из основного потока, потом сделать так, чтобы эта функция завершилась, пусть и с ошибкой, а после нее поставить проверку свойства Terminated. если оно true, то Exit. Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Ну циклы так и сделаны, "while not terminated", функция блокирующая поток - ну пусть к примеру будет sleep(INFINITE).
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#6
|
||||
|
||||
Цитата:
Тогда как вообще можно вывести поток из состояния когда он внутри блокирующей функции, типа бесконечного слипа, в принудиловку впендюрить ему SetThreadContext? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 22.07.2012 в 16:42. |
#7
|
||||
|
||||
Часть проблемы решена путем анализирования ошибки ERROR_SEM_TIMEOUT.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |