СОЗДАНИЕ ЭФФЕКТИВНЫХ |
|
WIN32-ПРИЛОЖЕНИЙ |
|
Джеффри Рихтер |
|
ЧАCTЬ I МАТЕРИАЛЫ ДЛЯ ОБЯЗАТЕЛЬНОГО ЧТЕНИЯ…………………………………………… |
8 |
ГЛАВА 1. Обработка ошибок …………………………………………………………………………………….. |
8 |
Вы тоже можете это сделать………………………………………………………………………………….. |
12 |
Программа-пример ErrorShow……………………………………………………………………………….. |
13 |
ГЛАВА 2 Unicode …………………………………………………………………………………………………….. |
14 |
Наборы символов………………………………………………………………………………………………….. |
14 |
Одно- и двухбайтовые наборы символов……………………………………………………………. |
14 |
Unicode: набор широких символов …………………………………………………………………….. |
15 |
Почему Unicode?…………………………………………………………………………………………………… |
16 |
Windows 2000 и Unicode ……………………………………………………………………………………….. |
16 |
Windows 98 и Unicode …………………………………………………………………………………………… |
17 |
Windows CE и Unicode ………………………………………………………………………………………….. |
18 |
В чью пользу счет? ……………………………………………………………………………………………….. |
18 |
Unicode и СОМ …………………………………………………………………………………………………….. |
18 |
Как писать программу с использованием Unicode………………………………………………….. |
19 |
Unicode и библиотека С …………………………………………………………………………………….. |
19 |
Типы данных, определенные в Windows для Unicode …………………………………………. |
21 |
Unicode- и ANSI-функции в Windows ………………………………………………………………… |
21 |
Строковые функции Windows ……………………………………………………………………………. |
23 |
Создание программ, способных использовать и ANSI, и Unicode …………………………… |
23 |
Ресурсы …………………………………………………………………………………………………………….. |
26 |
Текстовые файлы ………………………………………………………………………………………………. |
27 |
Перекодировка строк из Unicode в ANSI и обратно ……………………………………………. |
28 |
ГЛАВА 3 Объекты ядра ……………………………………………………………………………………………. |
31 |
Что такое объект ядра …………………………………………………………………………………………… |
31 |
Учет пользователей объектов ядра …………………………………………………………………….. |
32 |
Защита………………………………………………………………………………………………………………. |
33 |
Таблица описателей объектов ядра ……………………………………………………………………….. |
35 |
Создание объекта ядра ………………………………………………………………………………………. |
35 |
Закрытие объекта ядра ………………………………………………………………………………………. |
37 |
Совместное использование объектов ядра несколькими процессами ……………………… |
38 |
Наследование описателя объекта……………………………………………………………………….. |
38 |
Изменение флагов описателя …………………………………………………………………………….. |
41 |
Именованные объекты ………………………………………………………………………………………. |
42 |
Дублирование описателей объектов…………………………………………………………………… |
46 |
ЧАСТЬ II НАЧИНАЕМ РАБОТАТЬ …………………………………………………………………………….. |
50 |
ГЛАВА 4 Процессы………………………………………………………………………………………………….. |
51 |
Ваше первое Windows-приложение……………………………………………………………………….. |
52 |
Описатель экземпляра процесса ………………………………………………………………………… |
55 |
Описатель предыдущего экземпляра процесса …………………………………………………… |
57 |
Командная строка процесса……………………………………………………………………………….. |
57 |
Переменные окружения …………………………………………………………………………………….. |
58 |
Привязка к процессорам ……………………………………………………………………………………. |
61 |
Режим обработки ошибок ………………………………………………………………………………….. |
61 |
Текущие диск и каталог для процесса ………………………………………………………………… |
62 |
Текущие каталоги для процесса…………………………………………………………………………. |
62 |
Определение версии системы…………………………………………………………………………….. |
63 |
Функция CreateProcess ………………………………………………………………………………………….. |
67 |
Параметры pszApplicationName и pszCommandLine……………………………………………. |
67 |
Параметры psaProcess, psaThread и blnheritHandles …………………………………………….. |
69 |
Параметр fdwCreate …………………………………………………………………………………………… |
70 |
Параметр pvEnvironment……………………………………………………………………………………. |
72 |
Параметр pszCurDir …………………………………………………………………………………………… |
72 |
Параметр psiStartlnfo …………………………………………………………………………………………. |
72 |
Параметр ppiProclnfo…………………………………………………………………………………………. |
76 |
Завершение процесса ……………………………………………………………………………………………. |
78 |
Возврат управления входной функцией первичного потока ……………………………….. |
78 |
Функция ExitProcess ………………………………………………………………………………………….. |
78 |
Функция TerminateProcess …………………………………………………………………………………. |
80 |
Когда все потоки процесса уходят……………………………………………………………………… |
80 |
Что происходит при завершении процесса …………………………………………………………. |
81 |
Дочерние процессы ………………………………………………………………………………………………. |
81 |
Запуск обособленных дочерних процессов ………………………………………………………… |
83 |
Перечисление процессов, выполняемых в системе ………………………………………………… |
84 |
Программа-пример Processlnfo ………………………………………………………………………….. |
84 |
ГЛАВА 5 Задания …………………………………………………………………………………………………….. |
87 |
Определение ограничений, налагаемых на процессы в задании ……………………………… |
90 |
Включение процесса в задание ……………………………………………………………………………… |
96 |
Завершение всех процессов в задании …………………………………………………………………… |
97 |
Получение статистической информации о задании………………………………………………… |
97 |
Уведомления заданий………………………………………………………………………………………….. |
101 |
Программа-пример JobLab ………………………………………………………………………………….. |
103 |
ГЛАВА 6 Базовые сведения о потоках…………………………………………………………………….. |
104 |
В каких случаях потоки создаются………………………………………………………………………. |
105 |
И в каких случаях потоки не создаются……………………………………………………………….. |
107 |
Ваша первая функция потока ………………………………………………………………………………. |
108 |
Функция CreateThread …………………………………………………………………………………………. |
108 |
Параметр psa …………………………………………………………………………………………………… |
109 |
Параметр cbStack …………………………………………………………………………………………….. |
109 |
Параметры pfnStartAddr и pvParam…………………………………………………………………… |
110 |
Параметр fdwCreate …………………………………………………………………………………………. |
111 |
Параметр pdwThreadlD ……………………………………………………………………………………. |
111 |
Завершение потока ……………………………………………………………………………………………… |
112 |
Возврат управления функцией потока ……………………………………………………………… |
112 |
Функция ExitThread…………………………………………………………………………………………. |
112 |
Функция TerminateThread ………………………………………………………………………………… |
113 |
Если завершается процесс ……………………………………………………………………………….. |
113 |
Что происходит при завершении потока…………………………………………………………… |
114 |
Кое-что о внутреннем устройстве потока …………………………………………………………….. |
114 |
Некоторые соображения по библиотеке С/С++ ……………………………………………………. |
117 |
Ой, вместо _beginthreadex я по ошибке вызвал CreateThread …………………………….. |
126 |
Библиотечные функции, которые лучше не вызывать ………………………………………. |
126 |
Как узнать о себе ………………………………………………………………………………………………… |
127 |
Преобразование псевдоописателя в настоящий описатель ………………………………… |
128 |
ГЛАВА 7 Планирование потоков, приоритет и привязка к процессорам ………………….. |
130 |
Приостановка и возобновление потоков………………………………………………………………. |
131 |
Приостановка и возобновление процессов …………………………………………………………… |
132 |
Функция Sleep …………………………………………………………………………………………………….. |
134 |
Переключение потоков ……………………………………………………………………………………….. |
134 |
Определение периодов выполнения потока …………………………………………………………. |
135 |
Структура CONTEXT………………………………………………………………………………………….. |
138 |
Приоритеты потоков …………………………………………………………………………………………… |
142 |
Абстрагирование приоритетов…………………………………………………………………………….. |
143 |
Программирование приоритетов …………………………………………………………………………. |
147 |
Динамическое изменение уровня приоритета потока ……………………………………….. |
149 |
Подстройка планировщика для активного процесса …………………………………………. |
151 |
Программа-пример Scheduling Lab …………………………………………………………………… |
152 |
Привязка потоков к процессорам……………………………………………………………………… |
153 |
ГЛАВА 8 Синхронизация потоков в пользовательском режиме……………………………….. |
158 |
Атомарный доступ: семейство Inferlockect-функций ……………………………………………. |
158 |
Кэш-линии………………………………………………………………………………………………………….. |
164 |
Более сложные методы синхронизации потоков…………………………………………………… |
165 |
Худшее, что можно сделать …………………………………………………………………………….. |
166 |
Критические секции ……………………………………………………………………………………………. |
168 |
Критические секции: важное дополнение…………………………………………………………. |
171 |
Критические секции и спин-блокировка…………………………………………………………… |
174 |
Критические секции и обработка ошибок ………………………………………………………… |
175 |
Несколько полезных приемов ………………………………………………………………………….. |
175 |
ГЛАВА 9 Синхронизация потоков с использованием объектов ядра………………………… |
179 |
Wait-функции ……………………………………………………………………………………………………… |
181 |
Побочные эффекты успешного ожидания ……………………………………………………………. |
184 |
События ……………………………………………………………………………………………………………… |
185 |
Программа-пример Handshake …………………………………………………………………………. |
189 |
Ожидаемые таймеры …………………………………………………………………………………………… |
191 |
Ожидаемые таймеры и АРС-очередь …………………………………………………………………… |
194 |
И еще кое-что о таймерах ………………………………………………………………………………… |
196 |
Семафоры …………………………………………………………………………………………………………… |
197 |
Мьютексы…………………………………………………………………………………………………………… |
199 |
Отказ от объекта-мьютекса ……………………………………………………………………………… |
201 |
Мьютексы и критические секции ………………………………………………………………………… |
201 |
Программа-пример Queue………………………………………………………………………………… |
202 |
Сводная таблица объектов, используемых для синхронизации потоков………………… |
205 |
Другие функции, применяемые в синхронизации потоков……………………………………. |
206 |
Асинхронный ввод-вывод на устройствах………………………………………………………… |
206 |
Функция WaitForlnputldle ………………………………………………………………………………… |
206 |
Функция MsgWaitForMultipleObjects(Ex) …………………………………………………………. |
207 |
Функция WaitForDebugEvent …………………………………………………………………………… |
207 |
Функция SignalObjectAndWait …………………………………………………………………………. |
208 |
ГЛАВА 10 Полезные средства для синхронизации потоков …………………………………….. |
209 |
Реализация критической секции: объект-оптекс…………………………………………………… |
210 |
Программа-пример Optex ………………………………………………………………………………… |
212 |
Создание инверсных семафоров и типов данных, безопасных в многопоточной среде |
|
…………………………………………………………………………………………………………………………… |
213 |
Программа-пример lnterlockedType ………………………………………………………………….. |
218 |
Синхронизация в сценарии «один писатель/группа читателей» …………………………….. |
218 |
Программа-пример SWMRG ……………………………………………………………………………. |
220 |
Реализация функции WaitForMultipleExpressions …………………………………………………. |
221 |
Программа-пример WaitForMultExp…………………………………………………………………. |
223 |
ГЛАВА 11 Пулы потоков ……………………………………………………………………………………….. |
227 |
Сценарий 1: асинхронный вызов функций …………………………………………………………… |
228 |
Сценарий 2: вызов функций через определенные интервалы времени ………………….. |
231 |
Программа-пример TimedMsgBox ……………………………………………………………………. |
234 |
Сценарий 3: вызов функций при освобождении отдельных объектов ядра ……………. |
235 |
Сценарий 4; вызов функций по завершении запросов на асинхронный ввод-вывод .237 |
|
ГЛАВА 12 Волокна ………………………………………………………………………………………………… |
239 |
Работа с волокнами …………………………………………………………………………………………….. |
239 |
Программа-пример Counter ……………………………………………………………………………… |
242 |
ЧАСТЬ III УПРАВЛЕНИЕ ПАМЯТЬЮ………………………………………………………………………. |
244 |
ГЛАВА 13 Архитектура памяти в Windows …………………………………………………………….. |
244 |
Виртуальное адресное пространство процесса …………………………………………………….. |
245 |
Как адресное пространство разбивается на разделы …………………………………………….. |
245 |
Раздел для выявления нулевых указателей (Windows 2000 и Windows 98) ………… |
246 |
Раздел для совместимости с программами DOS и 16-разрядной Windows (только |
|
Windows 98) ……………………………………………………………………………………………………. |
247 |
Раздел для кода и данных пользовательского режима (Windows 2000 и Windows 98) |
|
……………………………………………………………………………………………………………………….. |
247 |
Закрытый раздел размером 64 Кб (только Windows 2000)…………………………………. |
249 |
Раздел для общих MMF (только Windows 98)…………………………………………………… |
249 |
Раздел для кода и данных режима ядра (Windows 2000 и Windows 98) ……………… |
249 |
Регионы в адресном пространстве ……………………………………………………………………….. |
250 |
Передача региону физической памяти …………………………………………………………………. |
251 |
Физическая память и страничный файл ……………………………………………………………….. |
251 |
Физическая память в страничном файле не хранится ……………………………………….. |
254 |
Атрибуты защиты ……………………………………………………………………………………………….. |
255 |
Защита типа «копирование при записи» …………………………………………………………… |
256 |
Специальные флаги атрибутов защиты…………………………………………………………….. |
257 |
Подводя итоги…………………………………………………………………………………………………….. |
257 |
Блоки внутри регионов ……………………………………………………………………………………. |
260 |
Особенности адресного пространства в Windows 98…………………………………………. |
265 |
Выравнивание данных ………………………………………………………………………………………… |
269 |
ГЛАВА 14 Исследование виртуальной памяти ………………………………………………………… |
273 |
Системная информация ………………………………………………………………………………………. |
273 |
Программа-пример Syslnfo ………………………………………………………………………………. |
275 |
Статус виртуальной памяти…………………………………………………………………………………. |
275 |
Программа-пример VMStat ……………………………………………………………………………… |
277 |
Определение состояния адресного пространства………………………………………………….. |
278 |
Функция VMQuery ………………………………………………………………………………………….. |
279 |
Программа-пример VMMap …………………………………………………………………………….. |
281 |
ГЛАВА 15 Использование виртуальной памяти в приложениях ………………………………. |
284 |
Резервирование региона в адресном пространстве ……………………………………………….. |
284 |
Передача памяти зарезервированному региону ……………………………………………………. |
286 |
Резервирование региона с одновременной передачей физической памяти…………….. |
287 |
В какой момент региону передают физическую память ……………………………………….. |
287 |
Возврат физической памяти и освобождение региона ………………………………………….. |
289 |
В какой момент физическую память возвращают системе ………………………………… |
290 |
Программа-пример VMAIloc……………………………………………………………………………. |
291 |
Изменение атрибутов защиты ……………………………………………………………………………… |
293 |
Сброс содержимого физической памяти………………………………………………………………. |
294 |
Программа-пример MemReset………………………………………………………………………….. |
296 |
Механизм Address Windowing Extensions (только Windows 2000)…………………………. |
297 |
Программа-пример AWE …………………………………………………………………………………. |
301 |
ГЛАВА 16 Стек потока …………………………………………………………………………………………… |
302 |
Стек потока в Windows 98 …………………………………………………………………………………… |
305 |
Функция из библиотеки С/С++ для контроля стека………………………………………………. |
307 |
Программа-пример Summation…………………………………………………………………………….. |
309 |
ГЛАВА 17 Проецируемые в память файлы ……………………………………………………………… |
311 |
Проецирование в память EXE- и DLL-файлов ……………………………………………………… |
311 |
Статические данные не разделяются несколькими экземплярами EXE или DLL ..313 |
|
Статические данные разделяются несколькими экземплярами EXE или DLL……. |
315 |
Программа-пример Applnst ……………………………………………………………………………… |
319 |
Файлы данных, проецируемые в память ………………………………………………………………. |
321 |
Метод 1: один файл, один буфер ……………………………………………………………………… |
321 |
Метод 2: два файла, один буфер ………………………………………………………………………. |
321 |
Метод 3: один файл, два буфера ………………………………………………………………………. |
322 |
Метод 4: один файл и никаких буферов……………………………………………………………. |
322 |
Использование проецируемых в память файлов …………………………………………………… |
322 |
Этап1: создание или открытие объекта ядра «файл»…………………………………………. |
323 |
Этап 2: создание объекта ядра «проекция файла» …………………………………………….. |
324 |
Этап 3: проецирование файловых данных на адресное пространство процесса …. |
327 |
Этап 4: отключение файла данных от адресного пространства процесса …………… |
329 |
Этапы 5 и 6: закрытие объектов «проекция файла» и «файл» ……………………………. |
331 |
Программа-пример FileRev ……………………………………………………………………………… |
331 |
Обработка больших файлов ………………………………………………………………………………… |
334 |
Проецируемые файлы и когерентность………………………………………………………………… |
336 |
Базовый адрес файла, проецируемого в память ……………………………………………………. |
337 |
Особенности проецирования файлов на разных платформах………………………………… |
338 |
Совместный доступ процессов к данным через механизм проецирования…………….. |
341 |
Файлы, проецируемые на физическую память из страничного файла …………………… |
342 |
Программа-пример MMFShare…………………………………………………………………………. |
343 |
Частичная передача физической памяти проецируемым файлам ………………………….. |
344 |
Программа-пример MMFSparse ……………………………………………………………………….. |
345 |
ГЛАВА 18 Динамически распределяемая память…………………………………………………….. |
349 |
Стандартная куча процесса …………………………………………………………………………………. |
349 |
Дополнительные кучи в процессе………………………………………………………………………… |
350 |
Защита компонентов ……………………………………………………………………………………….. |
350 |
Более эффективное управление памятью …………………………………………………………. |
351 |
Локальный доступ …………………………………………………………………………………………… |
352 |
Исключение издержек, связанных с синхронизацией потоков…………………………… |
352 |
Быстрое освобождение всей памяти в куче ………………………………………………………. |
353 |
Создание дополнительной кучи ……………………………………………………………………….. |
353 |
Выделение блока памяти из кучи …………………………………………………………………….. |
354 |
Изменение размера блока ………………………………………………………………………………… |
355 |
Определение размера блока……………………………………………………………………………… |
356 |
Освобождение блока ……………………………………………………………………………………….. |
356 |
Уничтожение кучи…………………………………………………………………………………………… |
357 |
Использование куч в программах на С++ …………………………………………………………. |
357 |
Другие функции управления кучами……………………………………………………………………. |
361 |
ЧАСТЬ IV ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ …………………………….. |
363 |
ГЛАВА 19 DLL: основы …………………………………………………………………………………………. |
363 |
DLL и адресное пространство процесса……………………………………………………………….. |
364 |
Общая картина ……………………………………………………………………………………………………. |
366 |
Создание DLL-модуля…………………………………………………………………………………………. |
369 |
Что такое экспорт ……………………………………………………………………………………………. |
370 |
Создание DLL для использования с другими средствами разработки (отличными от |
|
Visual C++) ……………………………………………………………………………………………………… |
372 |
Создание ЕХЕ-модуля…………………………………………………………………………………………. |
373 |
Что такое импорт …………………………………………………………………………………………….. |
374 |
Выполнение ЕХЕ-модуля ……………………………………………………………………………………. |
376 |
ГЛАВА 20 DLL: более сложные методы программирования……………………………………. |
377 |
Явная загрузка DLL и связывание идентификаторов ……………………………………………. |
378 |
Явная загрузка DLL…………………………………………………………………………………………. |
378 |
Явная выгрузка DLL………………………………………………………………………………………… |
380 |
Явное подключение экспортируемого идентификатора ……………………………………. |
382 |
Функция входа/выхода………………………………………………………………………………………… |
383 |
Уведомление DLL_PROCESS_ATTACH ………………………………………………………….. |
385 |
Уведомление DLL_PROCESS_DETACH ………………………………………………………….. |
386 |
Уведомление DLL_THREAD_ATTACH …………………………………………………………… |
388 |
Уведомление DLL_THREAD_DETACH …………………………………………………………… |
389 |
Как система упорядочивает вызовы DIIMain ……………………………………………………. |
390 |
Функция DllMain и библиотека С/С++……………………………………………………………… |
393 |
Отложенная загрузка DLL …………………………………………………………………………………… |
394 |
Программа-пример DelayLoadApp …………………………………………………………………… |
398 |
Переадресация вызовов функций ………………………………………………………………………… |
399 |
Известные DLL …………………………………………………………………………………………………… |
400 |
Перенаправление DLL ………………………………………………………………………………………… |
402 |
Модификация базовых адресов модулей ……………………………………………………………… |
402 |
Связывание модулей …………………………………………………………………………………………… |
408 |
ГЛАВА 21 Локальная память потока ………………………………………………………………………. |
410 |
Динамическая локальная память потока………………………………………………………………. |
411 |
Использование динамической TLS…………………………………………………………………… |
413 |
Статическая локальная память потока …………………………………………………………………. |
416 |
ГЛАВА 22 Внедрение DLL и перехват API-вызовов………………………………………………… |
417 |
Пример внедрения DLL ………………………………………………………………………………………. |
418 |
Внедрение DLL c использованием реестра…………………………………………………………… |
420 |
Внедрение DLL с помощью ловушек …………………………………………………………………… |
422 |
Утилита для сохранения позиций элементов на рабочем столе …………………………. |
423 |
Внедрение DLL с помощью удаленных потоков ………………………………………………….. |
426 |
Программа-пример lnjLib ………………………………………………………………………………… |
430 |
Библиотека lmgWalk.dll …………………………………………………………………………………… |
431 |
Внедрение троянской DLL ………………………………………………………………………………….. |
433 |
Внедрение DLL как отладчика…………………………………………………………………………….. |
434 |
Внедрение кода в среде Windows 98 через проецируемый в память файл……………… |
434 |
Внедрение кода через функцию CreateProcess ……………………………………………………… |
434 |
Перехват API-вызовов: пример ……………………………………………………………………………. |
435 |
Перехват API-вызовов подменой кода ……………………………………………………………… |
436 |
Перехват API-вызовов с использованием раздела импорта……………………………….. |
436 |
Программа-пример LastMsgBoxlnfo …………………………………………………………………. |
440 |
ЧАСТЬ V СТРУКТУРНАЯ ОБРАБОТКА ИСКЛЮЧЕНИЙ ………………………………………… |
442 |
ГЛАВА 23 Обработчики завершения ………………………………………………………………………. |
442 |
Примеры использования обработчиков завершения …………………………………………….. |
443 |
Funcenstein1…………………………………………………………………………………………………….. |
443 |
Funcenstein2…………………………………………………………………………………………………….. |
444 |
Funcenstein3…………………………………………………………………………………………………….. |
446 |
Funcfurter1 ………………………………………………………………………………………………………. |
447 |
Проверьте себя: FuncaDoodleDoo …………………………………………………………………….. |
447 |
Funcenstein4…………………………………………………………………………………………………….. |
449 |
Funcarama1 ……………………………………………………………………………………………………… |
450 |
Funcarama2 ……………………………………………………………………………………………………… |
451 |
Funcarama3 ……………………………………………………………………………………………………… |
451 |
Funcarama4: последний рубеж………………………………………………………………………….. |
453 |
И еще о блоке finally ……………………………………………………………………………………….. |
454 |
Funcfurter2 ………………………………………………………………………………………………………. |
455 |
Программа-пример SEHTerm …………………………………………………………………………… |
456 |
ГЛАВА 24 Фильтры и обработчики исключений …………………………………………………….. |
458 |
Примеры использования фильтров и обработчиков исключений ………………………….. |
458 |
Funcmeister1 ……………………………………………………………………………………………………. |
459 |
Funcmeister2 ……………………………………………………………………………………………………. |
459 |
EXCEPTION_EXECUTE_HANDLER…………………………………………………………………… |
462 |
Некоторые полезные примеры …………………………………………………………………………. |
463 |
Глобальная раскрутка………………………………………………………………………………………. |
466 |
Остановка глобальной раскрутки …………………………………………………………………….. |
469 |
EXCEPTION_CONTINUE_EXECUTION……………………………………………………………… |
471 |
Будьте осторожны с EXCEPTION_CONTINUE_EXECUTION ………………………….. |
472 |
EXCEPTION_CONTINUE_SEARCH……………………………………………………………………. |
473 |
Функция GetExceptionCode …………………………………………………………………………………. |
476 |
Функция GetExceptionlnformation ………………………………………………………………………… |
480 |
Программные исключения ………………………………………………………………………………….. |
484 |
ГЛАВА 25 Необработанные исключения и исключения С++ …………………………………… |
487 |
Отладка по запросу……………………………………………………………………………………………… |
490 |
Отключение вывода сообщений об исключении ………………………………………………….. |
491 |
Принудительное завершение процесса …………………………………………………………….. |
491 |
Создание оболочки вокруг функции потока……………………………………………………… |
491 |
Создание оболочки вокруг всех функций потоков ……………………………………………. |
492 |
Автоматический вызов отладчика ……………………………………………………………………. |
492 |
Явный вызов функции UnhandledExceptionFilter ………………………………………………….. |
493 |
Функция UnhandledExceptionFilter изнутри………………………………………………………….. |
494 |
Исключения и отладчик ………………………………………………………………………………………. |
495 |
Программа-пример Spreadsheet………………………………………………………………………… |
498 |
Исключения С++ и структурные исключения………………………………………………………. |
501 |
Перехват структурных исключений в С++ ……………………………………………………….. |
503 |
ЧАСТЬ VI ОПЕРАЦИИ С ОКНАМИ………………………………………………………………………….. |
507 |
ГЛАВА 26 Оконные сообщения ……………………………………………………………………………… |
507 |
Очередь сообщений потока …………………………………………………………………………………. |
508 |
Посылка асинхронных сообщений в очередь потока ……………………………………………. |
508 |
Посылка синхронных сообщений окну………………………………………………………………… |
510 |
Пробуждение потока …………………………………………………………………………………………… |
515 |
Флаги состояния очереди ………………………………………………………………………………… |
516 |
Алгоритм выборки сообщений из очереди потока ……………………………………………. |
517 |
Пробуждение потока с использованием объектов ядра или флагов состояния |
|
очереди …………………………………………………………………………………………………………… |
521 |
Передача данных через сообщения ……………………………………………………………………… |
524 |
Программа-пример CopyData …………………………………………………………………………… |
527 |
Как Windows манипулирует с ANSI/Unicode-символами и строками ……………………. |
527 |
ГЛАВА 27 Модель аппаратного ввода и локальное состояние ввода ……………………….. |
529 |
Год: 2008
Добавил: Admin 19 Апр 12
Проверил: Admin 19 Апр 12
Формат:
PDF (3652 Kb)
- Currently 0/5
Рейтинг: 0/5 (Всего голосов: 0)
Аннотация
Windows для профессионалов: создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows, 4-ое издание
Другие книги автора Рихтер Джеффри
Другие книги серии «Для профессионалов»
Похожие книги
Комментарии к книге «Windows для профессионалов: создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows, 4-ое издание»
Комментарий не найдено. Будьте первыми!
Чтобы оставить комментарий или поставить оценку книге Вам нужно зайти на сайт или зарегистрироваться
Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows
Это издание — практически новая книга, посвященная программированию серьезных приложений на Microsoft Visual С++ в операционных системах Windows 2000 (32- и 64-разрядных версиях) и Windows 98 с использованием функций Windows API. Состоит из 27 глав, двух приложений и предметного указателя. Гораздо глубже, чем в предыдущих изданиях, рассматриваются такие темы, как взаимодействие с операционной системой, библиотеки С/С++, программирование DLL и оптимизация кода, описываются новые механизмы и функции, появившиеся в Windows 2000, и приводится информация, специфическая для 64-разрядной Windows 2000. В этом издании автор, перейдя с языка С на С++, переработал все программы-примеры и представил ряд новых приложений, например ProcessInfo и LISWatch. Также появились совершенно новые материалы: выравнивание данных, привязка потоков к процессорам, кэш-линии процессоров, архитектура NUMA, перехват API-вызовов и др. Книга предназначена профессиональным программистам, владеющим языком С/С++ и имеющим опыт разработки Windows-приложений.
EPUB | FB2 | PDF | MOBI | TXT | RTF
* Конвертация файла может нарушить форматирование оригинала. По-возможности скачивайте файл в оригинальном формате.
- Название: Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows
- Категория: Книги / Программирование
- Страниц: 749
- Просмотров: 488
Читать журнал Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Издание четвёртое, 2004, Джеффри Рихтер онлайн или скачать бесплатно с Яндекс Диска. Этот журнал и похожие на него журналы находятся в разделе сайта: Программирование, журналы. Свежий номер журнала Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Издание четвёртое, 2004, Джеффри Рихтер, доступный для бесплатного чтения и скачивания, опубликован специально для вас. Вы долго искали почитать что-то интересное, и наконец, нашли. Обязательно прочитайте и скачайте онлайн журнал: Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Издание четвёртое, 2004, Джеффри Рихтер из раздела: Программирование, , и не забудьте посмотреть другие журналы, ничуть не хуже этого. Все журналы публикуются на сайте только по вашим желаниям, специально для вас!
Читать журнал Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Издание четвёртое, 2004, Джеффри Рихтер бесплатно — полная версия
Windows для профессионалов. Создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows. Издание четвёртое, 2004, Джеффри Рихтер — описание и краткое содержание, читайте бесплатно онлайн на сайте all-journals.com
Ознакомьтесь с Windows Runtime и изучите передовые методики разработки приложений из Магазина Windows. Авторы книги Джеффри Рихтер и Мартен ван де Боспурт, имеющие немалый опыт программирования в среде Windows и на платформе .NET Framework, помогут вам освоить основные понятия и принципы работы с Windows Runtime.
Форматы: fb2, txt, pdf, epub, mobi
В этой книге вы найдете немало полезных советов и практических рекомендаций по составлению структуры, разработке, оптимизации и отладке приложений из Магазина Windows.
Эта книга поможет вам:
- Пользоваться прикладными программными интерфейсами WinRT API на C#
- Усвоить основные принципы составления архитектуры приложений из Магазина Windows
- Понять, каким образом осуществляется построение, развертывание и защита пакетов приложений из Магазина Windows
- Разобраться, каким образом активизируются приложения и как модель процесса управляет их выполнением
- Изучить расширенные возможности для работы с файлами и папками.
- Понять особенности передачи, уплотнения и шифрования данных в потоках ввода-вывода
- Научиться разрабатывать приложения, создающие впечатление будто они выполняются, используя живые плитки, фоновые задачи и разные виды фоновой передачи данных
- Организовывать обмен данными между приложениями через буфер обмена или с помощью кнопки Share на панели инструментов Charms в Windows
- Получить полезные советы, как зарабатывать на своих приложениях через Магазин Windows
Здесь можно скачать книгу «WinRT. Программирование на C# для профессионалов» для ознакомления (бесплатный PDF фрагмент от правообладателя), почитать онлайн или купить полную электронную версию в форматах FB2, PDF, EPUB, TXT, FB3, MOBI.