Текущий архив: 2003.03.27;
Скачать: CL | DM;
ВнизЗавершение процесса Найти похожие ветки
← →
jack128 (2003-03-15 21:31) [0]Добрый день.
Сейчас усиленно читаю Рихтера и вот возник вопрос:
Что происходит при завершении основного потока?
По Рихтеру - завершается процесс. Но что происходит с другими потоками процесса? Каким образом завершаются эти потоки, мне непонятно. Например в дополнительном потоке выполняется такой код :
begin
for i := 0 to 1000 do begin
... // Какие то вычисления
end;
// В этот момент завершается основной поток...
for i := 0 to 10000 do begin
... // Какие то вычисления
... // Эти вычисления не будут выполнятся???
end;
end;
Если они недубут выполнятся, то могут быть не освабождены ресурсы, не записана на диск информация..
Не логичнее было бы завершать процесс, когда завершаюся все потоки??
← →
y-soft (2003-03-15 21:41) [1]Я уже как-то приводил этот пример. Попробуйте и посмотрите в диспетчере задач и сразу все станет понятно:
program LifeAfterDeath;
{$APPTYPE CONSOLE}
uses
Windows,SysUtils;
var
FirstID,SecondID : Cardinal;
const
PAUSE = 5000;
function SecondThreadFunc(Data : pointer) : integer;
begin
Result := 2;
Writeln("The additional thread began work... [#", SecondID,"]");
Sleep(PAUSE*2);
Writeln("Additional stream together with this process will be finished in 5 seconds...");
Sleep(PAUSE);
end;
begin
FirstID := GetCurrentThreadID;
Writeln("Primary thread began work...[#",FirstID,"]");
Sleep(PAUSE);
CreateThread(nil,0,@SecondThreadFunc,nil,0,SecondID);
Sleep(PAUSE);
Writeln("Now primary thread will be finished...");
ExitThread(1);
end.
← →
jack128 (2003-03-16 01:09) [2]Получается процесс не завершается до тех пор пока не завершатся все потоки? И Рихтер(или переводчики) ну скажем помягче вводят народ в заблуждение??
---Cut-----
Процесс можно завершить четырьмя способами:
входная функция первичного потока возвращает управление (рекомендуемый способ),
----Cut-----------
(c) Рихтер
← →
y-soft (2003-03-16 08:13) [3]У Рихтера в русском переводе говориться в одном месте о первичном потоке, в другом - о том, что процесс не может завершиться до завершения его последнего потока. Кроме того и до тех пор, пока будут внешние ссылки на процесс, т.е. возможна ситуация, когда вообще нет потоков, а процесс вроде бы еще есть...
Насчет первичного потока верно в общем случае для Delphi и C, т.к. в этих языках к первичному потоку привязывается инициализация системных библиотек и GUI-вывод (у Рихтера про это вскользь упомянуто)
Страницы: 1 вся ветка
Текущий архив: 2003.03.27;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.007 c