Джефри Рихтер — Создание эффективных WIN32 приложений
[ —>Скачать с сервера (4.54 Mb) — бесплатно]
22.05.2010, 01:04
Windows — это довольно сложная операционная система, вряд ли с этим кто-то может поспорить. Наверное, ни один человек в мире не сможет полностью и до конца разобраться в этой операционной системе.
Данное учебное пособие – это практически целая книга, которая создана для обучения программированию хороших и качественных приложений под Windows на Visual C++. В самоучителе глубоко рассматриваются темы, посвященные взаимодействию с операционной системой, библиотекам языка С, оптимизации кода, динамически подключаемым библиотекам и многое другое. Особенное внимание автор уделил созданию и уничтожению процессов и потоков.
По требованию многочисленных читателей в четвертое издание были включены примеры на С++, более компактные и легкие для понимания, нежели примеры для C. Весь код, описанный в книге, можно включать в свои программы, что, безусловно, сильно упростит жизнь при разработке.
Книга предназначена для опытных программистов или профессионалов своего дела. Для успешного ознакомления с материалом потребуются хорошие знания языка C/C++, а также хотя бы некоторый опыт в создании приложений под Windows. Прилагаемый в архиве компакт-диск содержит все коды, использованные в книге.
Краткое содержание:
Введение
Часть I: Материалы для обязательного чтения
Часть II: Начинаем работать
Часть III: Управление памятью
Часть IV: Динамически подключаемые библиотеки
Часть V: Структурная обработка исключений
Часть VI: Операции с окнами
Приложение A — Среда Разработки
Приложение B — Распаковщики сообщений, макросы для дочерних элементов управления и макросы API
Примеры к книге
Внимание: книга написана в 2001 году, так что её скорее следует рассматривать как антиквариат и изучать без веских на то причин не рекомендуется
Новые книги
Графические интерфейсы UNIX имеют давнюю историю. Первые программные разработки в этом направлении появились более 20 лет назад. Стандартом стала распределенная система X Window, которая позволяет рисовать на экране дисплея графические изображения, поддерживает концепцию окон и унифицирует работу с различными устройствами ввода-вывода на основе библиотеки Xlib. Для того чтобы облегчить программирование с применением Xlib (X11) и упростить создание пользовательских интерфейсов, существует несколько пакетов, из которых наиболее широко распространены X Toolkit Intrinsics (Xt), Athena (Xaw) и Motif (Xm). В последние годы появились два новых пакета: GTK+ и Qt, лежащих в основе популярных среди пользователей Linux графических интерфейсов GNOME и KDE.
Именно о программировании пользовательского интерфейса UNIX в системе X Window и будет идти речь в данной книге.
Отношения с клиентами – это не что-то абстрактное, возникающее само по себе. В секторе B2B существует последовательная система, позволяющая выстроить деловые связи с практически любым клиентом, а значит, успешно продавать и выполнять планы продаж.
Она будет полезна везде, где есть тендеры и корпоративные заказчики: в маркетинге, сфере диджитал, PR, рекламе, юридических, медицинских, страховых и консалтинговых услугах и т. д.
Книга адресована всем, кто хочет научиться использовать эту систему, выполнять планы продаж и обзавестись клиентами на всю жизнь.
WINDOWS
Джеффри Рихтер
ЧАCTЬ I МАТЕРИАЛЫ ДЛЯ ОБЯЗАТЕЛЬНОГО ЧТЕНИЯ.
ГЛАВА 1. Обработка ошибок .
Вы тоже можете это сделать.
ГЛАВА 2 Unicode .
Одно- и двухбайтовые наборы символов.
Unicode: набор широких символов .
Windows 2000 и Unicode .
Windows 98 и Unicode .
Windows CE и Unicode .
В чью пользу счет? .
Как писать программу с использованием Unicode.
Unicode и библиотека С .
Типы данных, определенные в Windows для Unicode .
Unicode- и ANSI-функции в Windows .
Строковые функции Windows .
Создание программ, способных использовать и ANSI, и Unicode .
Перекодировка строк из Unicode в ANSI и обратно .
ГЛАВА 3 Объекты ядра .
Что такое объект ядра .
Учет пользователей объектов ядра .
Таблица описателей объектов ядра .
Создание объекта ядра .
Закрытие объекта ядра .
Совместное использование объектов ядра несколькими процессами .
Наследование описателя объекта.
Изменение флагов описателя .
Дублирование описателей объектов.
ЧАСТЬ II НАЧИНАЕМ РАБОТАТЬ .
ГЛАВА 4 Процессы.
Ваше первое Windows-приложение.
Описатель экземпляра процесса .
Описатель предыдущего экземпляра процесса .
Командная строка процесса.
Привязка к процессорам .
Режим обработки ошибок .
Текущие диск и каталог для процесса .
Текущие каталоги для процесса.
Определение версии системы.
Параметры pszApplicationName и pszCommandLine.
Параметры psaProcess, psaThread и blnheritHandles .
Возврат управления входной функцией первичного потока .
Когда все потоки процесса уходят.
Что происходит при завершении процесса .
Запуск обособленных дочерних процессов .
Перечисление процессов, выполняемых в системе .
ГЛАВА 5 Задания .
Определение ограничений, налагаемых на процессы в задании .
Включение процесса в задание .
Завершение всех процессов в задании .
Получение статистической информации о задании.
ГЛАВА 6 Базовые сведения о потоках.
В каких случаях потоки создаются.
И в каких случаях потоки не создаются.
Ваша первая функция потока .
Параметры pfnStartAddr и pvParam.
Возврат управления функцией потока .
Если завершается процесс .
Что происходит при завершении потока.
Кое-что о внутреннем устройстве потока .
Некоторые соображения по библиотеке С/С++ .
Ой, вместо _beginthreadex я по ошибке вызвал CreateThread .
Библиотечные функции, которые лучше не вызывать .
Как узнать о себе .
Преобразование псевдоописателя в настоящий описатель .
ГЛАВА 7 Планирование потоков, приоритет и привязка к процессорам .
Приостановка и возобновление потоков.
Приостановка и возобновление процессов .
Определение периодов выполнения потока .
Динамическое изменение уровня приоритета потока .
Подстройка планировщика для активного процесса .
Программа-пример Scheduling Lab .
Привязка потоков к процессорам.
ГЛАВА 8 Синхронизация потоков в пользовательском режиме.
Атомарный доступ: семейство Inferlockect-функций .
Более сложные методы синхронизации потоков.
Худшее, что можно сделать .
Критические секции: важное дополнение.
Критические секции и спин-блокировка.
Критические секции и обработка ошибок .
Несколько полезных приемов .
ГЛАВА 9 Синхронизация потоков с использованием объектов ядра.
Побочные эффекты успешного ожидания .
Ожидаемые таймеры и АРС-очередь .
И еще кое-что о таймерах .
Отказ от объекта-мьютекса .
Мьютексы и критические секции .
Сводная таблица объектов, используемых для синхронизации потоков.
Другие функции, применяемые в синхронизации потоков.
Асинхронный ввод-вывод на устройствах.
ГЛАВА 10 Полезные средства для синхронизации потоков .
Реализация критической секции: объект-оптекс.
Создание инверсных семафоров и типов данных, безопасных в многопоточной среде
Синхронизация в сценарии «один писатель/группа читателей» .
Реализация функции WaitForMultipleExpressions .
ГЛАВА 11 Пулы потоков .
Сценарий 1: асинхронный вызов функций .
Сценарий 2: вызов функций через определенные интервалы времени .
Сценарий 3: вызов функций при освобождении отдельных объектов ядра .
Сценарий 4; вызов функций по завершении запросов на асинхронный ввод-вывод .237
ГЛАВА 12 Волокна .
Работа с волокнами .
ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ.
ГЛАВА 13 Архитектура памяти в Windows .
Виртуальное адресное пространство процесса .
Как адресное пространство разбивается на разделы .
Раздел для выявления нулевых указателей (Windows 2000 и Windows 98) .
Раздел для совместимости с программами DOS и 16-разрядной Windows (только
Раздел для кода и данных пользовательского режима (Windows 2000 и Windows 98)
Закрытый раздел размером 64 Кб (только Windows 2000).
Раздел для общих MMF (только Windows 98).
Раздел для кода и данных режима ядра (Windows 2000 и Windows 98) .
Регионы в адресном пространстве .
Передача региону физической памяти .
Физическая память и страничный файл .
Физическая память в страничном файле не хранится .
Защита типа «копирование при записи» .
Специальные флаги атрибутов защиты.
Блоки внутри регионов .
Особенности адресного пространства в Windows 98.
ГЛАВА 14 Исследование виртуальной памяти .
Статус виртуальной памяти.
Определение состояния адресного пространства.
ГЛАВА 15 Использование виртуальной памяти в приложениях .
Резервирование региона в адресном пространстве .
Передача памяти зарезервированному региону .
Резервирование региона с одновременной передачей физической памяти.
В какой момент региону передают физическую память .
Возврат физической памяти и освобождение региона .
В какой момент физическую память возвращают системе .
Изменение атрибутов защиты .
Сброс содержимого физической памяти.
Механизм Address Windowing Extensions (только Windows 2000).
ГЛАВА 16 Стек потока .
Стек потока в Windows 98 .
Функция из библиотеки С/С++ для контроля стека.
ГЛАВА 17 Проецируемые в память файлы .
Проецирование в память EXE- и DLL-файлов .
Статические данные не разделяются несколькими экземплярами EXE или DLL ..313
Статические данные разделяются несколькими экземплярами EXE или DLL.
Файлы данных, проецируемые в память .
Метод 1: один файл, один буфер .
Метод 2: два файла, один буфер .
Метод 3: один файл, два буфера .
Метод 4: один файл и никаких буферов.
Использование проецируемых в память файлов .
Этап1: создание или открытие объекта ядра «файл».
Этап 2: создание объекта ядра «проекция файла» .
Этап 3: проецирование файловых данных на адресное пространство процесса .
Этап 4: отключение файла данных от адресного пространства процесса .
Этапы 5 и 6: закрытие объектов «проекция файла» и «файл» .
Обработка больших файлов .
Проецируемые файлы и когерентность.
Базовый адрес файла, проецируемого в память .
Особенности проецирования файлов на разных платформах.
Совместный доступ процессов к данным через механизм проецирования.
Файлы, проецируемые на физическую память из страничного файла .
Частичная передача физической памяти проецируемым файлам .
ГЛАВА 18 Динамически распределяемая память.
Стандартная куча процесса .
Дополнительные кучи в процессе.
Более эффективное управление памятью .
Исключение издержек, связанных с синхронизацией потоков.
Джеффри Рихтер — лучшие книги
Год издания: 2013
Эта книга, выходящая в четвертом издании и уже ставшая классическим учебником по программированию, подробно описывает внутреннее устройство и функционирование общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 4.5. Написанная признанным экспертом в области программирования Джеффри Рихтером, много лет являющимся консультантом команды разработчиков .NET Framework компании Microsoft, книга научит вас создавать по-настоящему надежные приложения любого вида, в том числе с использованием Microsoft Silverlight, ASP.NET, Windows Presentation Foundation и т.д. Четвертое издание полностью обновлено в соответствии со спецификацией…
Год издания: 2007
Эта книга — подробное описание внутреннего устройства и функционирования общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 2.0. В ней раскрыта система типов .NET Framework и разъяснены способы управления ими. Представлены
Год издания: 2001
Серия: Для профессионалов
Это издание — практически новая книга, посвященная программированию серьезных приложений на Microsoft Visual C++ в операционных системах Windows 2000 (32- и 64-разрядных версиях) и Windows 98 с использованием функций Windows API. Состоит из 27 глав, двухприложений и предметного указателя. Гораздо глубже, чем в предыдущих изданиях, рассматриваются такие темы, как взаимодействие с операционной системой, библиотеки C/C++, программирование DLL и оптимизация кода, описываются новые механизмы и функции, появившиеся в Windows 2000, и приводится информация, специфическая для 64-разрядной Windows 2000. В этом издании автор, перейдя с языка С на C++,…
Год издания: 2008
Это издание — практически новая книга, посвященная разработке серьезных приложений на Visual C++ в операционных системах Windows XP и Windows Vista (32- и 64-разрядных версиях) с использованием функций Windows API. Гораздо глубже, чем в предыдущих изданиях, рассматриваются такие темы, как механизм User Account Control, взаимодействие с системой библиотеки C/C++ при реализации защитных механизмов и обработке исключений; представлены новые синхронизирующие механизмы. В это издание добавлены две совершенно новые главы: о механизмах ввода-вывода и о работе новой системы Windows Error Reporting, изменившей подходы к созданию отчетов об ошибках и…
WINDOWS
Джеффри Рихтер
ЧАCTЬ I МАТЕРИАЛЫ ДЛЯ ОБЯЗАТЕЛЬНОГО ЧТЕНИЯ.
ГЛАВА 1. Обработка ошибок .
Вы тоже можете это сделать.
ГЛАВА 2 Unicode .
Одно- и двухбайтовые наборы символов.
Unicode: набор широких символов .
Windows 2000 и Unicode .
Windows 98 и Unicode .
Windows CE и Unicode .
В чью пользу счет? .
Как писать программу с использованием Unicode.
Unicode и библиотека С .
Типы данных, определенные в Windows для Unicode .
Unicode- и ANSI-функции в Windows .
Строковые функции Windows .
Создание программ, способных использовать и ANSI, и Unicode .
Перекодировка строк из Unicode в ANSI и обратно .
ГЛАВА 3 Объекты ядра .
Что такое объект ядра .
Учет пользователей объектов ядра .
Таблица описателей объектов ядра .
Создание объекта ядра .
Закрытие объекта ядра .
Совместное использование объектов ядра несколькими процессами .
Наследование описателя объекта.
Изменение флагов описателя .
Дублирование описателей объектов.
ЧАСТЬ II НАЧИНАЕМ РАБОТАТЬ .
ГЛАВА 4 Процессы.
Ваше первое Windows-приложение.
Описатель экземпляра процесса .
Описатель предыдущего экземпляра процесса .
Командная строка процесса.
Привязка к процессорам .
Режим обработки ошибок .
Текущие диск и каталог для процесса .
Текущие каталоги для процесса.
Определение версии системы.
Параметры pszApplicationName и pszCommandLine.
Параметры psaProcess, psaThread и blnheritHandles .
Возврат управления входной функцией первичного потока .
Когда все потоки процесса уходят.
Что происходит при завершении процесса .
Запуск обособленных дочерних процессов .
Перечисление процессов, выполняемых в системе .
ГЛАВА 5 Задания .
Определение ограничений, налагаемых на процессы в задании .
Включение процесса в задание .
Завершение всех процессов в задании .
Получение статистической информации о задании.
ГЛАВА 6 Базовые сведения о потоках.
В каких случаях потоки создаются.
И в каких случаях потоки не создаются.
Ваша первая функция потока .
Параметры pfnStartAddr и pvParam.
Возврат управления функцией потока .
Если завершается процесс .
Что происходит при завершении потока.
Кое-что о внутреннем устройстве потока .
Некоторые соображения по библиотеке С/С++ .
Ой, вместо _beginthreadex я по ошибке вызвал CreateThread .
Библиотечные функции, которые лучше не вызывать .
Как узнать о себе .
Преобразование псевдоописателя в настоящий описатель .
ГЛАВА 7 Планирование потоков, приоритет и привязка к процессорам .
Приостановка и возобновление потоков.
Приостановка и возобновление процессов .
Определение периодов выполнения потока .
Динамическое изменение уровня приоритета потока .
Подстройка планировщика для активного процесса .
Программа-пример Scheduling Lab .
Привязка потоков к процессорам.
ГЛАВА 8 Синхронизация потоков в пользовательском режиме.
Атомарный доступ: семейство Inferlockect-функций .
Более сложные методы синхронизации потоков.
Худшее, что можно сделать .
Критические секции: важное дополнение.
Критические секции и спин-блокировка.
Критические секции и обработка ошибок .
Несколько полезных приемов .
ГЛАВА 9 Синхронизация потоков с использованием объектов ядра.
Побочные эффекты успешного ожидания .
Ожидаемые таймеры и АРС-очередь .
И еще кое-что о таймерах .
Отказ от объекта-мьютекса .
Мьютексы и критические секции .
Сводная таблица объектов, используемых для синхронизации потоков.
Другие функции, применяемые в синхронизации потоков.
Асинхронный ввод-вывод на устройствах.
ГЛАВА 10 Полезные средства для синхронизации потоков .
Реализация критической секции: объект-оптекс.
Создание инверсных семафоров и типов данных, безопасных в многопоточной среде
Синхронизация в сценарии «один писатель/группа читателей» .
Реализация функции WaitForMultipleExpressions .
ГЛАВА 11 Пулы потоков .
Сценарий 1: асинхронный вызов функций .
Сценарий 2: вызов функций через определенные интервалы времени .
Сценарий 3: вызов функций при освобождении отдельных объектов ядра .
Сценарий 4; вызов функций по завершении запросов на асинхронный ввод-вывод .237
ГЛАВА 12 Волокна .
Работа с волокнами .
ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ.
ГЛАВА 13 Архитектура памяти в Windows .
Виртуальное адресное пространство процесса .
Как адресное пространство разбивается на разделы .
Раздел для выявления нулевых указателей (Windows 2000 и Windows 98) .
Раздел для совместимости с программами DOS и 16-разрядной Windows (только
Раздел для кода и данных пользовательского режима (Windows 2000 и Windows 98)
Закрытый раздел размером 64 Кб (только Windows 2000).
Раздел для общих MMF (только Windows 98).
Раздел для кода и данных режима ядра (Windows 2000 и Windows 98) .
Регионы в адресном пространстве .
Передача региону физической памяти .
Физическая память и страничный файл .
Физическая память в страничном файле не хранится .
Защита типа «копирование при записи» .
Специальные флаги атрибутов защиты.
Блоки внутри регионов .
Особенности адресного пространства в Windows 98.
ГЛАВА 14 Исследование виртуальной памяти .
Статус виртуальной памяти.
Определение состояния адресного пространства.
ГЛАВА 15 Использование виртуальной памяти в приложениях .
Резервирование региона в адресном пространстве .
Передача памяти зарезервированному региону .
Резервирование региона с одновременной передачей физической памяти.
В какой момент региону передают физическую память .
Возврат физической памяти и освобождение региона .
В какой момент физическую память возвращают системе .
Изменение атрибутов защиты .
Сброс содержимого физической памяти.
Механизм Address Windowing Extensions (только Windows 2000).
ГЛАВА 16 Стек потока .
Стек потока в Windows 98 .
Функция из библиотеки С/С++ для контроля стека.
ГЛАВА 17 Проецируемые в память файлы .
Проецирование в память EXE- и DLL-файлов .
Статические данные не разделяются несколькими экземплярами EXE или DLL ..313
Статические данные разделяются несколькими экземплярами EXE или DLL.
Файлы данных, проецируемые в память .
Метод 1: один файл, один буфер .
Метод 2: два файла, один буфер .
Метод 3: один файл, два буфера .
Метод 4: один файл и никаких буферов.
Использование проецируемых в память файлов .
Этап1: создание или открытие объекта ядра «файл».
Этап 2: создание объекта ядра «проекция файла» .
Этап 3: проецирование файловых данных на адресное пространство процесса .
Этап 4: отключение файла данных от адресного пространства процесса .
Этапы 5 и 6: закрытие объектов «проекция файла» и «файл» .
Обработка больших файлов .
Проецируемые файлы и когерентность.
Базовый адрес файла, проецируемого в память .
Особенности проецирования файлов на разных платформах.
Совместный доступ процессов к данным через механизм проецирования.
Файлы, проецируемые на физическую память из страничного файла .
Частичная передача физической памяти проецируемым файлам .
ГЛАВА 18 Динамически распределяемая память.
Стандартная куча процесса .
Дополнительные кучи в процессе.
Более эффективное управление памятью .
Исключение издержек, связанных с синхронизацией потоков.