- •Создание эффективных win32-приложений
- •Глава 1. Обработка ошибок 8
- •Глава 2 Unicode 14
- •Глава 3 Объекты ядра 31
- •Часть II начинаем работать 51
- •Глава 4 Процессы 51
- •Глава 5 Задания 88
- •Глава 6 Базовые сведения о потоках 106
- •Глава 7 Планирование потоков, приоритет и привязка к процессорам 131
- •Глава 8 Синхронизация потоков в пользовательском режиме 159
- •Глава 9 Синхронизация потоков с использованием объектов ядра 181
- •Глава 10 Полезные средства для синхронизации потоков 211
- •Глава 14 Исследование виртуальной памяти 281
- •Глава 15 Использование виртуальной памяти в приложениях 292
- •Глава 16 Стек потока 309
- •Глава 17 Проецируемые в память файлы 318
- •Глава 18 Динамически распределяемая память 356
- •Часть IV динамически подключаемые библиотеки 370
- •Глава 19 dll: основы 370
- •Глава 20 dll: более сложные методы программирования 384
- •Глава 21 Локальная память потока 417
- •Глава 22 Внедрение dll и перехват api-вызовов 423
- •Часть V структурная обработка исключений 447
- •Глава 23 Обработчики завершения 447
- •Глава 24 Фильтры и обработчики исключений 463
- •Часть VI операции с окнами 510
- •Глава 2 Unicode
- •Глава 3 Объекты ядра
- •Часть II начинаем работать
- •Глава 4 Процессы
- •Глава 5 Задания
- •Глава 6 Базовые сведения о потоках
- •Глава 7 Планирование потоков, приоритет и привязка к процессорам
- •Глава 8 Синхронизация потоков в пользовательском режиме
- •Глава 9 Синхронизация потоков с использованием объектов ядра
- •Глава 10 Полезные средства для синхронизации потоков
- •Глава 11 Пулы потоков
- •Глава 12 Волокна
- •Часть III управление памятью
- •Глава 13 Архитектура памяти в Windows
- •Глава 14 Исследование виртуальной памяти
- •Глава 15 Использование виртуальной памяти в приложениях
- •Глава 16 Стек потока
- •Глава 17 Проецируемые в память файлы
- •Глава 18 Динамически распределяемая память
- •Часть IV динамически подключаемые библиотеки
- •Глава 19 dll: основы
- •Глава 20 dll: более сложные методы программирования
- •Глава 21 Локальная память потока
- •Глава 22 Внедрение dll и перехват api-вызовов
- •Часть V структурная обработка исключений
- •Глава 23 Обработчики завершения
- •Глава 24 Фильтры и обработчики исключений
- •Часть VI операции с окнами
- •Глава 26 Оконные сообщения
- •Глава 27 Модель аппаратного ввода и локальное состояние ввода
Глава 7 Планирование потоков, приоритет и привязка к процессорам 131
Приостановка и возобновление потоков 133
Приостановка и возобновление процессов 134
Функция Sleep 135
Переключение потоков 136
Определение периодов выполнения потока 136
Структура CONTEXT 139
Приоритеты потоков 143
Абстрагирование приоритетов 144
Программирование приоритетов 148
Динамическое изменение уровня приоритета потока 151
Подстройка планировщика для активного процесса 152
Программа-пример Scheduling Lab 154
Привязка потоков к процессорам 155
Глава 8 Синхронизация потоков в пользовательском режиме 159
Атомарный доступ: семейство Inferlockect-функций 160
Кэш-линии 165
Более сложные методы синхронизации потоков 167
Худшее, что можно сделать 168
Критические секции 169
Критические секции: важное дополнение 173
Критические секции и спин-блокировка 175
Критические секции и обработка ошибок 176
Несколько полезных приемов 177
Глава 9 Синхронизация потоков с использованием объектов ядра 181
Wait-функции 183
Побочные эффекты успешного ожидания 185
События 187
Программа-пример Handshake 191
Ожидаемые таймеры 192
Ожидаемые таймеры и АРС-очередь 196
И еще кое-что о таймерах 198
Семафоры 199
Мьютексы 201
Отказ от объекта-мьютекса 202
Мьютексы и критические секции 203
Программа-пример Queue 204
Сводная таблица объектов, используемых для синхронизации потоков 206
Другие функции, применяемые в синхронизации потоков 207
Асинхронный ввод-вывод на устройствах 208
Функция WaitForlnputldle 208
Функция MsgWaitForMultipleObjects(Ex) 209
Функция WaitForDebugEvent 209
Функция SignalObjectAndWait 210
Глава 10 Полезные средства для синхронизации потоков 211
Реализация критической секции: объект-оптекс 212
Программа-пример Optex 214
Создание инверсных семафоров и типов данных, безопасных в многопоточной среде 215
Программа-пример lnterlockedType 220
Синхронизация в сценарии "один писатель/группа читателей" 220
Программа-пример SWMRG 222
Реализация функции WaitForMultipleExpressions 223
Программа-пример WaitForMultExp 225
ГЛАВА 11 Пулы потоков 230
Сценарий 1: асинхронный вызов функций 231
Сценарий 2: вызов функций через определенные интервалы времени 233
Программа-пример TimedMsgBox 237
Сценарий 3: вызов функций при освобождении отдельных объектов ядра 238
Сценарий 4; вызов функций по завершении запросов на асинхронный ввод-вывод 240
ГЛАВА 12 Волокна 241
Работа с волокнами 242
Программа-пример Counter 244
ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ 247
ГЛАВА 13 Архитектура памяти в Windows 247
Виртуальное адресное пространство процесса 247
Как адресное пространство разбивается на разделы 248
Раздел для выявления нулевых указателей (Windows 2000 и Windows 98) 249
Раздел для совместимости с программами DOS и 16-разрядной Windows (только Windows 98) 249
Раздел для кода и данных пользовательского режима (Windows 2000 и Windows 98) 250
Закрытый раздел размером 64 Кб (только Windows 2000) 252
Раздел для общих MMF (только Windows 98) 252
Раздел для кода и данных режима ядра (Windows 2000 и Windows 98) 252
Регионы в адресном пространстве 253
Передача региону физической памяти 254
Физическая память и страничный файл 254
Физическая память в страничном файле не хранится 257
Атрибуты защиты 258
Защита типа «копирование при записи» 259
Специальные флаги атрибутов защиты 260
Подводя итоги 260
Блоки внутри регионов 264
Особенности адресного пространства в Windows 98 271
Выравнивание данных 277