Главная страница
    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.005 c
1-1256627612
Lionel
2009-10-27 10:13
2011.06.12
Вывод числа прописью в компонент Memo в FastReport


15-1298033535
oxffff
2011-02-18 15:52
2011.06.12
Языки и циклические зависимости между блоками компиляции(units)


1-1257268099
harisma
2009-11-03 20:08
2011.06.12
TCursorProperty в Delphi 7


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


15-1297418426
reqyz
2011-02-11 13:00
2011.06.12
Перевести 3 строчки C++ -> Delphi





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