Небольшой тестовый пример, демонстрирующий методику поиска причины завичания приложения при завершении работы системы [1].
Практическая часть, так сказать :)
вторник, 27 июля 2010 г.
Методика диагностики зависания приложения при shutdown-е
Исходная позиция: есть некое приложение app.exe (Проблемное приложение), которое "подвисает" при завершении работы системы, в результате чего отображается окно "Программа не отвечает" (либо "Завершение программы").
Задача: найти отчет на вопрос "почему".
Цель: решить проблему (в идеале - навсегда).
Достижение поставленной цели - это отдельная песня и здесь обсуждаться не будет :)
Речь пойдет о методах и приемах, с помощью которых можно определить причину такого поведения приложения.
Задача: найти отчет на вопрос "почему".
Цель: решить проблему (в идеале - навсегда).
Достижение поставленной цели - это отдельная песня и здесь обсуждаться не будет :)
Речь пойдет о методах и приемах, с помощью которых можно определить причину такого поведения приложения.
вторник, 1 июня 2010 г.
Запись строк в реестр и Delphi
Программируя в Delphi очень желательно записывать строковые данные в реестр в соответствии с документацией.
четверг, 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.
Но оказывается есть и исключения...
В реализации это выглядит так: для функции доступной через API может существовать две версии: Ansi (принимает строки ANSI) и Wide (принимает строки Unicode) - например CreateProcessA и CreateProcessW. И Ansi-версия является оболочкой (шлюзом) к Wide.
Но оказывается есть и исключения...
Подписаться на:
Сообщения (Atom)