Форум: "Основная";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизКак можно из главного потока завершить другой поток ? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c