Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
10-1098692190
WebErr
2004-10-25 12:16
2005.08.07
В Excel.Application NumericFormat у Range не устанавливается!!!


6-1114019313
Jetus
2005-04-20 21:48
2005.08.07
Блокировка файла от удаления по FTP


3-1119778637
bss
2005-06-26 13:37
2005.08.07
Ошибка "Недостаточно сведений о ключевом поле"


14-1121271727
Piter
2005-07-13 20:22
2005.08.07
Шлюз fido7.ru


3-1119705083
ks
2005-06-25 17:11
2005.08.07
права доступа к таблице Paradox




   Наверх