Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.07.2012, 13:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию Завершение потоков

Каким образом можно "гуманно" завершить работу потока (объекта TThread), находящегося в состоянии Suspended, при вызове терминатора признак "завершенный" ставится в 1, но поток продолжает свое существование, пока не закончит цикл в Execute (а там функция которая в блокирующем режиме работает).
Конечно TerminateThread спасает, но это уж как-то очень грубо.
Да и к тому же поток может быть приостановлен с EIP находящимся внутри некой ф-ии, где открыты какие-то хендлы, при таком прибивании хендлы так и останутся висеть? (глобальный менеджер хендлов поди нужен)
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 13.07.2012 в 13:22.
  #2  
Старый 13.07.2012, 13:44
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а что за функция в блокирующем режиме которая работает? Overlapped не поддерживает?

можно сначала вызвать Resume и Terminate из основного потока, потом сделать так, чтобы эта функция завершилась, пусть и с ошибкой, а после нее поставить проверку свойства Terminated. если оно true, то Exit.
__________________
Пишу программы за еду.
__________________
  #3  
Старый 13.07.2012, 13:52
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну циклы так и сделаны, "while not terminated", функция блокирующая поток - ну пусть к примеру будет sleep(INFINITE).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #4  
Старый 13.07.2012, 13:58
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от M.A.D.M.A.N.
sleep(INFINITE)
ну тогда все просто - замени ее на WaitForSingleObject() для Event, а в основном потоке SetEvent(), когда нужно завершить поток, чтобы Wait завершился.
__________________
Пишу программы за еду.
__________________
  #5  
Старый 13.07.2012, 15:08
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Как раз сегодня читал.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
  #6  
Старый 22.07.2012, 16:28
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Как раз сегодня читал.
Спасибо за ссылку.

Тогда как вообще можно вывести поток из состояния когда он внутри блокирующей функции, типа бесконечного слипа, в принудиловку впендюрить ему SetThreadContext?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 22.07.2012 в 16:42.
  #7  
Старый 31.07.2012, 15:53
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Часть проблемы решена путем анализирования ошибки ERROR_SEM_TIMEOUT.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter