Ответ на задачку №25

Ответ на задачку №25.
Сначала можно подумать что утверждение — не верно. Действительно:

begin
TMyThread.Create.Start;
end.

Эта программа завершится немедленно, не дав потоку выполниться. Иными словами, программа завершается, когда в ней есть работающие потоки.

Однако, если вы читаете документацию (MSDN) или, например, Рихтера, то заметите, что там говорится о завершении процесса при выходе или завершении всех его потоков. Это явно противоречит ситуации выше.

В чём же дело?

Дело в том, что MSDN и Рихтер говорят о ситуации в «голой» системе, но мы рассматриваем случай, когда поверх системы накладывается ещё код поддержки языка — RTL. Система, действительно, не делает различий между главным и фоновыми потоками и закроет процесс только тогда, когда завершится каждый из потоков — вне зависимости от того, главный он или нет.

Но для RTL разница есть — главный поток выделяется особо. В частности, RTL с помощью «магии компилятора» вставляет скрытый вызов Halt(0) сразу после выполнения главного блока программы (т.е. в строке «end.»). Вот и получается, что при нормальном выходе программы вызывается Halt(0), который, в свою очередь, вызывает ExitProcess, которая завершает все потоки и, следовательно, процесс.

RTL не одинока в таком поведении. Большинство библиотек поддержки языков поступают так же. Почему они это делают? Потому что в современном мире программа понятия не имеет, какие потоки в ней выполняются.

Читать на сайте автора.

Старомодная матчасть по завершению процессов

Это перевод The old-fashioned theory on how processes exit. Автор: Реймонд Чен.

В былые времена жизнь была намного проще.

В прежние времена считалось, что процессы контролируют свои

Читать на сайте автора.

Релиз RAD Studio 10.3 Rio, Delphi 10.3 Rio и C++Builder 10.3 Rio

Релиз RAD Studio 10.3 Rio. Подробности: Что нового в RAD Studio 10.3 Rio Release Notes for Rio Installation Notes for Rio Новые возможности и список

Читать на сайте автора.

Релиз RAD Studio 10.3 Rio, Delphi 10.3 Rio и C++Builder 10.3 Rio

Релиз RAD Studio 10.3 Rio. Подробности: Что нового в RAD Studio 10.3 Rio Release Notes for Rio Installation Notes for Rio Новые возможности и список

Читать на сайте автора.

RAD Studio 10.3 Rio

Итак, 21.11.2018 был выпущен релиз RAD Studio 10.3 Rio. Следует отметить несколько интересных моментов, связанных с этим релизом. В связи с этим я решил сделать

Читать на сайте автора.

RAD Studio 10.3 Rio

Итак, 21.11.2018 был выпущен релиз RAD Studio 10.3 Rio. Следует отметить несколько интересных моментов, связанных с этим релизом. В связи с этим я решил сделать

Читать на сайте автора.

Арифметика указателей

Читать на сайте автора.

Как однажды ядро Windows пыталось противостоять гамма-лучам, разрушающим кэш процессора

Это перевод For a brief period, the kernel tried to deal with gamma rays corrupting the processor cache. Автор: Реймонд Чен.

Однажды вот такой код был

Читать на сайте автора.

Список из рекордов на коленке

Честно подсмотрено.
THeader = record
x,y,z: TMyRecordField;
NextLabel: packed record end;
end;

На сколько прекрасно, на столько и отвратительно. Но восхищает однозначно хотя бы тем, что это вообще

Читать на сайте автора.