Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

Как можно из главного потока завершить другой поток ?   Найти похожие ветки 

 
Juice ©   (2005-07-20 23:07) [0]

Как можно из главного потока завершить другой поток ?
Потоковая функция такая:

TMyThread.Execute;
begin
 DataSet.Open;
end;

Пробовал:

TerminateThread( MyThread.handle, 0); - зависание
MyThread.Terminate - аналогично
MyThread.Free - тоже виснет


 
kull   (2005-07-20 23:11) [1]

Тут тебе может помочь только изменение реализации DataSet.Open


 
Juice ©   (2005-07-20 23:18) [2]

Сори, забыл уточнить:
При использовании TerminateThread( MyThread.handle, 0) и  MyThread.Terminate  зависание происходит не сразу - сначала вроде все выглядит ок, программа виснет после попытки закрыть главное окно (после нажима на сист. кнопку "х").
MyThread.Free - виснет сразу.


> Тут тебе может помочь только изменение реализации DataSet.Open

???


 
Juice ©   (2005-07-20 23:19) [3]


> Тут тебе может помочь только изменение реализации DataSet.Open

Не верю :)


 
kull   (2005-07-20 23:24) [4]

Насколько я понимаю.
Когда ты закрываешь главное окно, твой поток продолжает работать, а именно, метод Open. Поэтому программа и виснет. А Terminate только свойство Terminated устанавливает, которое ты и должен проверять в Execute. Надо разбираться с Open, почему он так долго работает.

А насчет изменения реализации - это шютка. :)


 
juice ©   (2005-07-21 00:57) [5]


> Terminate только свойство Terminated устанавливает, которое
> ты и должен проверять в Execute

Возможности что-то проверять нет никакой, почему я и код потоковой функции привел.

> Когда ты закрываешь главное окно, твой поток продолжает
> работать, а именно, метод Open

После TerminateThread мой поток не должен продолжать работать.


 
Германн ©   (2005-07-21 02:11) [6]

Имхо, сей топик лучше перенести в Базы! Поскольку в большинстве случаев некий
 DataSet.Open;

вызывает драйвер баз данных. А уж как он там работает?
И, тогда, при чем тут некие потоки?


 
evvcom ©   (2005-07-21 08:26) [7]

Все верно. Причина в Open. Какая СУБД?


 
Juice ©   (2005-07-21 09:59) [8]


> Все верно. Причина в Open. Какая СУБД?

Interbase. Open делает запрос к ХП (выполняется около минуты)


 
Digitman ©   (2005-07-21 11:42) [9]


> Open делает запрос к ХП (выполняется около минуты)


по поводу корректного снятия длительных IB-запросов с выполнения (c участием ХП) на ibase.ru есть статья с примерами.

принудительное же снятие трэда (в контексте которого выполняется такой запрос) с выполнения при пом. TerminateThread() есть потенциальный источник утечек ресурсов.


 
Juice ©   (2005-07-21 17:56) [10]


> принудительное же снятие трэда (в контексте которого выполняется
> такой запрос) с выполнения при пом. TerminateThread() есть
> потенциальный источник утечек ресурсов.

Да я так и думал и уже хотел хвататься за переписывание потока на чистом АПИ, да лень было, решил спросить :)

> по поводу корректного снятия длительных IB-запросов с выполнения
> (c участием ХП) на ibase.ru есть статья с примерами

Перерыл весь сайт, ничего не нахожу. Буду очень признателен за намек где искать. В нете тоже ничего нет. Такое впечатление что это вообще никогда и никем не использовалсь, а ведь тема очень актуальная для серьезных приложений, ИМХО.


 
Juice ©   (2005-07-21 18:29) [11]

Тема закрыта



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
1-1121827337
-=snoop=-
2005-07-20 06:42
2005.08.07
перебор объектов TCheckBox на форме


3-1119924189
Alert Fox
2005-06-28 06:03
2005.08.07
Запуск базы данных на другом компе


3-1119934418
DimonS
2005-06-28 08:53
2005.08.07
Мастера! Поскажите по надежности БД.


10-1098875056
Николай
2004-10-27 15:04
2005.08.07
Проблема MS Access


1-1121761002
Maniak48
2005-07-19 12:16
2005.08.07
Выделение слова в TWebbrowser по клику правой кнопкой мыши.