Форум: "Начинающим";
Текущий архив: 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