Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.012 c
3-87879
AFrolov
2003-03-11 12:31
2003.03.27
Выгрузка таблицы в файл в формате DBF (как это сделать?)


1-87924
Ozone
2003-03-17 11:37
2003.03.27
Включение файлов в проект


1-87954
ish1
2003-03-17 10:51
2003.03.27
Направление текста снизу вверх


1-88034
BofA
2003-03-14 15:35
2003.03.27
Как перебрать все компоненты, расположенные на TPanel?


7-88273
mmmh
2003-02-01 01:15
2003.03.27
Люди помогите спрятать кнопки от всех форм с панели задач