Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Вниз

Многозадачность. TThread.   Найти похожие ветки 

 
Leon-Z ©   (2011-03-04 11:38) [0]

Как завершить TThread ???

procedure TThraed.Execute;
begin
 Proc1;
 Proc2;
 Proc3;
end;

Я не использую цикла while в котором обычно проверяют
свойство Terminated:
while not Terminated do begin ... end
Процедуры Proc1, Proc2, Proc3 выполняются долго,
поэтому может возникнуть потребность просто "убить поток" во
время выполнения. Как это сделать ????????


 
sniknik ©   (2011-03-04 11:44) [1]

> просто "убить поток"
ну убивай поток! он отомстит!

тем более "просто",
причина должна быть веская... например выход из программы из-за критической ошибки (при которой "убийство" и так делается).


 
Боброжелатель   (2011-03-04 11:46) [2]

Правильнее будет проверять Terminated внутри Proc1, Proc2, Proc3.
Можно еще TerminateThread(Thread.Handle...), но так лучше не делать, ибо любое "убивание" чревато последствиями.


 
Leon-Z ©   (2011-03-04 11:58) [3]


> sniknik ©   (04.03.11 11:44) [1]
> > просто "убить поток"ну убивай поток! он отомстит! тем
> более "просто",причина должна быть веская... например выход
> из программы из-за критической ошибки (при которой "убийство"
> и так делается).

Причина очень веская - пользователь закрывает программу.

> Боброжелатель   (04.03.11 11:46) [2]
> Правильнее будет проверять Terminated внутри Proc1, Proc2,
>  Proc3.

А без этого никак ??? Может можно как-нибудь по другому?


 
sniknik ©   (2011-03-04 12:28) [4]

> Причина очень веская - пользователь закрывает программу.
тогда "забей", закроется и без тебя.


 
Боброжелатель   (2011-03-04 12:38) [5]

тогда "забей", закроется и без тебя

Думаю, если он открывает в потоке файлы на запись, то "забить" вряд ли получится. То есть, можно, конечно. Но что будет потом с недописанными файлами?
Впрочем, то же касается и открытых сокетов, пайпов, сетевых сессий более высокого уровня (всяких там POP3, SMTP) и прочего, что выходит за пределы этой, конкретно взятой программы. Все что "торчит наружу" следует закрывать корректно.


 
sniknik ©   (2011-03-04 13:03) [6]

> Но что будет потом с недописанными файлами?
то же самое, что от принудительного терминирования извне, отсюда - "а если нет разницы", тогда мы идем к вам... т.е. "забей".


 
clickmaker ©   (2011-03-04 13:11) [7]

> Причина очень веская - пользователь закрывает программу.

если долго выполняется атомарная операция, над которой нет контроля (ф-ия АПИ, к примеру), то без вариантов TerminateThread.
Но это, скорей, исключение. Обычно всегда можно какой-то флажок в цикле проверять. Другое дело, что усложняется логика, да и банально лень иногда )


 
sniknik ©   (2011-03-04 13:12) [8]

> следует закрывать корректно.
а с эти кто то спорит? но он же хочет "просто закрыть", и тут уж пусть готовиться что поток "отомстит", и "мстя" его может быть ужасна...


 
sniknik ©   (2011-03-04 13:16) [9]

> то без вариантов TerminateThread.
а ты попробуй, сделай поток такой функцией, запусти и нажми "крестик" на форме.
только без установок в потоке всяких "вайтфор"...

вот и вариант.


 
Anatoly Podgoretsky ©   (2011-03-04 13:16) [10]


> Процедуры Proc1, Proc2, Proc3 выполняются долго,

Ты должен предусмотреть механизм экстренного выхода из Proc1, Proc2, Proc3
Больше ничего делать не надо


 
clickmaker ©   (2011-03-04 13:36) [11]

> а ты попробуй, сделай поток такой функцией, запусти и нажми
> "крестик" на форме.
> только без установок в потоке всяких "вайтфор"...

ну по-нормальному, конечно все работать должно.
Однако, почему-то приложения виснут иногда )


 
Боброжелатель   (2011-03-04 14:07) [12]

а с эти кто то спорит?

С этим никто не спорит. Просто автор вопроса этого то ли не знает, то ли не понимает, о чем можно судить из его вопроса: "А без этого никак?" [3]. Собственно, я и объясняю автору вопроса, почему не следует делать "без этого".


 
Leonid Troyanovsky ©   (2011-03-04 17:26) [13]


> sniknik ©   (04.03.11 11:44) [1]

> ну убивай поток! он отомстит!

Вот умру и стану гнусно вонять.
И вы все подохните от этой вони.

;)

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
6-1237876024
Alex_C
2009-03-24 09:27
2011.06.12
ClientSocket + TThread = ошибка при завершении программы


2-1299073367
pest
2011-03-02 16:42
2011.06.12
MySQL + Proxy + Delphi (работа с MySQL серевером через прокси)


1-1256910300
webpauk
2009-10-30 16:45
2011.06.12
Размер иконки


15-1298266795
Лун
2011-02-21 08:39
2011.06.12
Облегчить беспорядок


2-1299748160
ZV
2011-03-10 12:09
2011.06.12
Как отключть авто скролинг в Memo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский