» » » Джонсон Харт - Системное программирование в среде Windows


Авторские права

Джонсон Харт - Системное программирование в среде Windows

Здесь можно скачать бесплатно "Джонсон Харт - Системное программирование в среде Windows" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство Издательский дом "Вильямс", год 2005. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Джонсон Харт - Системное программирование в среде Windows
Рейтинг:
Название:
Системное программирование в среде Windows
Издательство:
Издательский дом "Вильямс"
Год:
2005
ISBN:
5-8459-0879-5
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Системное программирование в среде Windows"

Описание и краткое содержание "Системное программирование в среде Windows" читать бесплатно онлайн.



Эта книга посвящена вопросам разработки приложений с использованием интерфейса прикладного программирования операционных систем компании Microsoft (Windows 9х, Windows XP, Windows 2000 и Windows Server 2003). Основное внимание уделяется базовым системным службам, включая управление файловой системой, процессами и потоками, взаимодействие между процессами, сетевое программирование и синхронизацию. Рассматривается методика переноса приложений, написанных в среде Win32, в среду Win64. Подробно описываются все аспекты системы безопасности Windows и ее практического применения. Изобилие реальных примеров, доступных также и на Web-сайте книги, существенно упрощает усвоение материала.

Книга ориентирована на разработчиков и программистов, как высокой квалификации, так и начинающих, а также будет полезна для студентов соответствующих специальностей.






Образно говоря, автоматически сбрасываемое событие — это дверь, снабженная пружиной, которая обеспечивает автоматическое закрытие двери, в то время как вручную сбрасываемое событие можно уподобить двери, в которой пружина отсутствует и которая, будучи раз открытой, продолжает оставаться в таком состоянии. Используя эту метафору, можно сказать, что функция PulseEvent открывает дверь и закрывает ее сразу же после того, как через нее проходят одна (автоматически сбрасываемые события) или все (вручную сбрасываемые события) ожидающие потоки. Функция SetEvent открывает дверь и освобождает ее.

Пример: система "производитель/потребитель"

В этом примере возможности программы 8.1 расширяются таким образом, чтобы потребитель мог дожидаться момента, когда появится доступное сообщение. Тем самым устраняется одна из проблем, связанная с тем, что в предыдущем варианте программы потребитель должен был непрерывно повторять попытки получения новых сообщений. Результирующая программа (программа 8.2) называется eventPC.

Заметьте, что в предлагаемом решении вместо объектов CRITICAL_SECTION используются мьютексы; единственной причиной для этого послужило лишь желание проиллюстрировать применение мьютексов. В то же время, использование автоматически сбрасываемого события и функции SetEvent в потоке потребителя является весьма существенным для работы программы, поскольку это гарантирует освобождение только одного потока.

Также обратите внимание на способ связывания мьютекса и события со структурой данных блока сообщения. Мьютекс активизирует критический участок кода для доступа к объекту структуры данных, тогда как событие используется для уведомления о том, что появилось новое сообщение. Обобщая, можно сказать, что мьютекс гарантирует сохранение инвариантов объекта, а событие сигнализирует о нахождении объекта в заданном состоянии. Эта базовая методика широко применяется в последующих главах.

Программа 8.2. eventPC: система "производитель/потребитель", использующая сигналы 

/* Глава 8. eventPC.с */

/* Поддерживает два потока — производителя и потребителя. */

/* Производитель периодически создает буферные данные с контрольными */

/* суммами, или "блоки сообщений", сигнализирующие потребителю о готовности*/

/* сообщения. Поток потребителя отображает информацию в ответ на запрос.*/


#include "EvryThng.h"

#include <time.h>

#define DATA_SIZE 256


typedef struct msg_block_tag { /* Блок сообщения. */

 volatile DWORD f_ready, f_stop; /* Флаги готовности и прекращения сообщений. */

 volatile DWORD sequence; /* Порядковый номер блока сообщения. */

 volatile DWORD nCons, nLost; time_t timestamp;

 HANDLE mguard; /* Мьютекс, защищающий структуру блока сообщения. */ 

 HANDLE mready; /* Событие "Сообщение готово". */

 DWORD checksum; /* Контрольная сумма сообщения. */

 DWORD data[DATA_SIZE]; /* Содержимое сообщения. */

} MSG_BLOCK;


/* … */


DWORD _tmain(DWORD argc, LPTSTR argv[]) {

 DWORD Status, ThId;

 HANDLE produce_h, consume_h;

 /* Инициализировать мьютекс и событие (автоматически сбрасываемое) в блоке сообщения. */

 mblock.mguard = CreateMutex(NULL, FALSE, NULL);

 mblock.mready = CreateEvent(NULL, FALSE, FALSE, NULL);

 /* Создать потоки производителя и потребителя; ожидать их завершения.*/

 /* … Как в программе 9.1 … */

 CloseHandle(mblock.mguard);

 CloseHandle(mblock.mready);

 _tprintf(_T("Потоки производителя и потребителя завершили выполнение\n"));

 _tprintf(_T("Отправлено: %d, Получено: %d, Известные потери: %d\n"), mblock.sequence, mblock.nCons, mblock.nLost);

 return 0;

}


DWORD WINAPI produce(void *arg)

/* Поток производителя — создание новых сообщений через случайные */

/* интервалы времени. */

{

 srand((DWORD)time(NULL)); /* Создать начальное число для генератора случайных чисел. */

 while(!mblock.f_stop) {

  /* Случайная задержка. */

  Sleep(rand() / 10); /* Длительный период ожидания следующего сообщения. */

  /* Получить и заполнить буфер. */

  WaitForSingleObject(mblock.mguard, INFINITE);

  __try {

   if (!mblock.f_stop) {

    mblock.f_ready = 0;

    MessageFill(&mblock);

    mblock.f_ready = 1;

    mblock.sequence++;

    SetEvent(mblock.mready); /* Сигнал "Сообщение готово". */

   }

  } __finally { ReleaseMutex (mblock.mguard); }

 }

 return 0;

}


DWORD WINAPI consume (void *arg) {

 DWORD ShutDown = 0;

 CHAR command, extra;

 /* Принять ОЧЕРЕДНОЕ сообщение по запросу пользователя. */

 while (!ShutDown) { /* Единственный поток, получающий доступ к стандартным устройствам ввода/вывода. */

  _tprintf(_T("\n** Введите 'с' для приема; 's' для прекращения работы: "));

  _tscanf("%c%c", &command, &extra);

  if (command == 's') {

   WaitForSingleObject(mblock.mguard, INFINITE);

   ShutDown = mblock.f_stop = 1;

   ReleaseMutex(mblock.mguard);

  } else if (command == 'c') {

   /* Получить новый буфер принимаемых сообщений. */

   WaitForSingleObject(mblock.mready, INFINITE);

   WaitForSingleObject(mblock.mguard, INFINITE);

   __try {

    if (!mblock.f_ready) _leave;

    /* Ожидать наступление события, указывающего на готовность сообщения. */

    MessageDisplay(&mblock);

    mblock.nCons++;

    mblock.nLost = mblock.sequence – mblock.nCons;

    mblock.f_ready = 0; /* Новые готовые сообщения отсутствуют. */

   } __finally { ReleaseMutex (mblock.mguard); }

  } else {

   _tprintf(_T("Недопустимая команда. Повторите попытку.\n"));

  }

 }

 return 0;

}

Примечание

Существует вероятность того, что поток потребителя, уведомленный о готовности сообщения, в действительности не успеет обработать текущее сообщение до того, как поток производителя сгенерирует еще одно сообщение до захвата мьютекса потоком потребителя. В результате такого поведения программы поток потребителя может обработать одно и то же сообщение дважды, если бы не проверка, предусмотренная в начале try-блока потребителя. Эта и другие аналогичные проблемы обсуждаются в главе 10.

Обзор: объекты синхронизации Windows

Наиболее важные свойства объектов синхронизации Windows перечислены в табл. 8.2.


Таблица 8.2. Сравнительные характеристики объектов синхронизации Windows

CRITICAL_SECTION Мьютекс Семафор Событие Именованный защищаемый объект синхронизации Нет Да Да Да Доступность из нескольких процессов Нет Да Да Да Синхронизация Вхождение Ожидание Ожидание Ожидание Освобождение Выход Мьютекс может быть освобожден или оставлен без контроля. Освобождается любым потоком. Функции SetEvent, PulseEvent. Права владения В каждый момент времени иметь права владельца может только один поток. Владеющий поток может осуществлять вхождение несколько раз, не блокируя свое выполнение. В каждый момент времени иметь права владельца может только один поток. Владеющий поток может выполнять функцию ожидания несколько раз, не блокируя свое выполнение. Понятие владения неприменимо. Доступ разрешен одновременно нескольким потокам, число которых ограничено максимальным значением счетчика. Понятие владения неприменимо. Функции SetEvent и PulseEvent могут быть вызваны любым потоком. Результат освобождения Разрешается вхождение одного потока из числа ожидающих. Вслед за последним освобождением права владения разрешается приобрести одному потоку из числа ожидающих. Продолжать выполнение могут несколько потоков, число которых определяется текущим значением счетчика. После вызова функций SetEvent или PulseEvent продолжать выполнение будет один или несколько ожидающих потоков.

Ожидание сообщений и объектов


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Системное программирование в среде Windows"

Книги похожие на "Системное программирование в среде Windows" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Джонсон Харт

Джонсон Харт - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Джонсон Харт - Системное программирование в среде Windows"

Отзывы читателей о книге "Системное программирование в среде Windows", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.