Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Лабораторная работа №1
Цель работы: Изучение использовать объекты-события для синхронизации работы задач.
Синхронизация задач (в том числе и принадлежацих разным приложениям) заключается в том, что некоторые задачи должны приостанавливать свое выполнение до тех пор, пока не произойдут те или иные события, связанные с другими задачами.
Эффективным методом синхронизации, используемый ОС Windows, является использование объектов синхронизации, которые называется событиями. Схема использования событий достаточно проста.
Одна из задач создает обьект-событие, вызывая для этого функцию CreateEvent. При этом событие получает имя, которое доступно всем задачам активных процессов.
Вызывая функцию WaitForSingleObject или WaitForMultipleObject, задача может выполнять ожидание момента, когда событие перейдет в отмеченное состояние. Другая задача, принадлежащая тому же или иному процессу, может получить идентификатор события по его имени, например с помощью функции OpenEvent. Далее, пользуясь функциями SetEvent, Reset Event или PulseEvent, эта задача может изменить состояние события.
Для создания события задача должна вызвать функцию CreateEvent, прототип которой приведен ниже:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES IpEventAttributes, //атрибуты защиты BOOL bManualReset, // флаг ручного сброса события
BOOL blnitialState, // флаг начального состояния события
LPCTSTR IpName); // адрес имени объекта-события.
Параметр IpEventAttributes задает атрибуты защиты и в большинстве случаев может быть указан как NULL.
С помощью параметра bManualReset вы можете выбрать один из двух режимов работы объекта-события: ручной. (TRUE) или автоматический (FALSE). Если задан ручной режим работы объекта-события, его нужно сбрасывать вручную при помощи функции ResetEvent. При использовании автоматического режима работы объекта-события событие будет переведено в неотмеченное состояние (сброшено) сразу после того, как задача завершит ожидание этого события.
Параметр blnitialState определяет начальное состояние объекта-события: отмеченное (TRUE) или сброшенное (FALSE).
Для того чтобы объектом-событием могли пользоваться задачи, созданные разными процессами, необходимо с помощью параметра lpName задать имя события. Имя события подчиняется правилам создания имен языка С. Если событие используется в рамках одного процесса, в качестве имени события можно задать значение NULL. При этом создается безымянное событие.
В случае успешного завершения функция GreateEvent возвращает идентификатор события, который можно будет использовать во всех функциях, связанных с событием. При ошибке возвращается NULL. Если событие используется с задачами, созданными в рамках одного процесса, его не нужно открывать. Если событие используется для синхронизации задач, принадлежащих разным процессам, задача должна открыть событие при помощи функции OpenEvent:
HANDLE OpenEvent(
DWORD fdwAccess, // флаги доступа
BOOL hInherit, //флаг наследования
LPCTSTR lpszEventName); // адрес имени объекта-события.
Флаги доступа, передаваемые через параметр fdwAccess, определяют требуемый уровень доступа к объекту-событию. Значение EVENT_ALL_ACCESS определяет все возможные флаги доступа.
Параметр hInherit определяет, может ли полученный
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.