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

Вниз

Многозадачность. 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1299244957
novichek
2011-03-04 16:22
2011.06.12
Почти уникальный ID


2-1299749847
Неважно
2011-03-10 12:37
2011.06.12
C++ в Delphi.


6-1237807196
FireMan_Alexey
2009-03-23 14:19
2011.06.12
Вопрос по НТТР


2-1299248506
я_только_учусь
2011-03-04 17:21
2011.06.12
Возможно ли выполнить SQL запрос для двух различных DataSource?


2-1299212434
smart
2011-03-04 07:20
2011.06.12
Считывание значений из xml