О нет, снова настало время проверок

Это перевод Oh no, it’s inspection time again. Автор: Реймонд Чен.

Ниже я воссоздаю памятку, прикрепленную к дверям офиса некоторых обитателей кампуса Microsoft RedWest четырнадцать лет

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

Награда Ship It

Это перевод Windows Confidential: Ship It. Автор: Реймонд Чен.

Кто получает награду «Ship It»? Вы должны внести свой вклад в выпуск самого продукта, иначе вы просто

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

Почему функции Bluetooth экспортируются из аплета инфракрасной связи?

Это перевод Why are Bluetooth functions exported from the infrared control panel? Автор: Реймонд Чен.

Помните инфракрасную связь?

Ладно, может и не помните. Она развивалась в конце

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

Запрос документации о том, что политика "Запрашивать достоверный путь для входа в учётную запись" больше не рекомендуется

Это перевод Asking for clear written documentation that Require trusted path for credential entry is no longer recommended. Автор: Реймонд Чен.

Клиент включил политику «Запрашивать достоверный

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

Почему деинсталятор моей программы пропадает из меню "Пуск"?

Это перевод Why does my app’s uninstaller disappear from the Start menu? Автор: Реймонд Чен.

Клиент сообщил, что его программа установки создает ярлык в меню «Пуск»

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

Почему попытка остановить мою службу возвращает ERROR_BROKEN_PIPE?

Это перевод What does it mean when my attempt to stop a Windows NT service fails with ERROR_BROKEN_PIPE? Автор: Реймонд Чен.

Один клиент сообщил, что иногда

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

Почему компилятор генерирует операции с памятью для полной переменной, даже если задействован только один байт?

Это перевод Why does the compiler generate memory operations on the full variable even though only one byte is involved? Автор: Реймонд Чен.

Когда-то я помогал

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

Поддержка классического оборудования эмуляцией

Это перевод Keeping classic hardware alive through emulation. Автор: Реймонд Чен.

На конференции и выставке Windows 2000, которая совпала с запуском операционной системы, я посетил стенд

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

Зачем нужна красная зона? Я же могу просто использовать стек?

Это перевод Why do we even need to define a red zone? Can’t I just use my stack for anything? Автор: Реймонд Чен.

В Windows стек

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

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

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

begin
TMyThread.Create.Start;
end.

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

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

В чём же дело?

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

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

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

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