Джеффри рихтер windows для профессионалов создание эффективных win32 приложений

Джефри Рихтер — Создание эффективных WIN32 приложений

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 Динамически распределяемая память.

Стандартная куча процесса .

Дополнительные кучи в процессе.

Более эффективное управление памятью .

Исключение издержек, связанных с синхронизацией потоков.

Читайте также:  Panasonic kx mb1500 mac os big sur
Оцените статью
[ —>Скачать с сервера (4.54 Mb) — бесплатно] 22.05.2010, 01:04