Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1121928117
Funt_IK
2005-07-21 10:41
2005.08.07
Delphi 2005


4-1118130484
Андрей Жук
2005-06-07 11:48
2005.08.07
Как получить выбранный Item в ComboBoxEx


4-1118079752
NikNet
2005-06-06 21:42
2005.08.07
Как вызвать приревание в DELPHI из RING3 (Третего кольца)


14-1121515639
default
2005-07-16 16:07
2005.08.07
Работа Л.Заде "Нечеткие множества"


14-1121347022
Narik
2005-07-14 17:17
2005.08.07
ListBox1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский