четверг, 20 мая 2010 г.

История о том, как поток заблокировал самого себя

   Интересный случай однажды встретился мне - поток заблокировал самого себя, а вместе с тем и подвесил все приложение. Случай скорее из области экзотики, но тем не менее, при его расследовании я узнал много нового, так что есть в нем определенный академический интерес.

   Но обо всем по-порядку...

вторник, 11 мая 2010 г.

Обработка ошибок и GetLastError()

   Когда Вы вызываете функцию Windows, она проверяет переданные ей параметры, а затем пытается выполнить свою работу. Если Вы передали недопустимый параметр или если данную операцию нельзя выполнить по какой-то другой причине, она возвращает значение, свидетельствующее об ошибке.

среда, 5 мая 2010 г.

WM_QUERYENDSESSION и WM_ENDSESSION (Windows Shutdown)

   Завершение работы Windows или как система завершает пользовательские приложения при Shutdown-e.

понедельник, 3 мая 2010 г.

Маленькая особенность OutputDebugString

   Начиная с Windows 2000, все операционные системы Microsoft линейки NT целиком и полностью построены на Unicode. Все ключевые функции для создания окон, вывода текста, операций со строками и т.д. требуют Unicode-строк. Если какой-то функции Windows передается ANSI-строка, она сначала преобразуется в Unicode и лишь потом передается операционной системе.
   В реализации это выглядит так: для функции доступной через API может существовать две версии: Ansi (принимает строки ANSI) и Wide (принимает строки Unicode) - например CreateProcessA и CreateProcessW. И Ansi-версия является оболочкой (шлюзом) к Wide.

   Но оказывается есть и исключения...