- •Процессы и задачи в Microsoft Windows
- •Запуск задач
- •Управление запущенными задачами
- •Изменение приоритета задачи
- •Определение приоритета задачи
- •Приостановка и возобновление выполнения задачи
- •Временная приостановка работы задачи
- •Завершение задачи
- •Освобождение идентификатора задачи
- •Критические секции
- •Инициализация критической секции
- •Удаление критической секции
- •Вход в критическую секцию и выход из нее
- •4. Контрольные вопросы
- •5. Содержание работы
- •Создание объекта - событие
- •Открытие объекта - событие
- •Управление состоянием объекта - событие
- •Объекты – событие с автосбросом
- •Создание объекта Mutex
- •Освобождение идентификатора объекта Mutex
- •Открытие объекта Mutex
- •Как завладеть объектом Mutex
- •Освобождение объекта Mutex
- •Как работает семафор
- •Функции для работы с семафорами
- •Создание семафора
- •Уничтожение семафора •
- •Увеличение значения счетчика семафора
- •Уменьшение значения счетчика семафора
- •Определение текущего значения счетчика семафора
- •Создание и открытие ожидаемого таймера
- •Функции для работы с ожидаемым таймером
- •Контрольные вопросы
- •Содержание работы
- •Содержание отчета
- •Теоретический материал
- •7.1. Универсальные функции для работы с файлами в операционных системах Microsoft Windows
- •Функция CreateFile
- •Функция CloseHandle
- •Функции ReadFile и WriteFile
- •Механизм отображения файлов на память
- •Создание отображения файла
- •Выполнение отображения файла в память
- •Открытие отображения
- •Отмена отображения файла
- •Принудительная запись измененных данных
- •Обмен через файлы, отображаемые на память
- •Пример приложения, использующего файлы, отображаемые на память
- •Именованные и анонимные каналы
- •Имена каналов
- •Реализации каналов
- •Создание канала
- •Установка соединения с каналом со стороны сервера
- •Пример приложения, использующего каналы передачи данных Pipes
- •Создание канала Mailslot
- •Открытие канала Mailslot
- •Запись сообщений в канал Mailslot
- •Чтение сообщений из канала Mailslot
- •Определение состояния канала Mailslot
- •Изменение состояния канала Mailslot
- •Пример приложения, использующего каналы передачи данных MailSlot
- •Пример приложения, использующего передачу сообщений между процессами
Создание объекта - событие
Для создания объекта - событие вы должны использовать функцию CreateEvent, прототип которой приводится ниже:
HANDLE CreateEvent( |
|
|
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes |
// атрибуты защиты |
|
BOOL fManualReset, |
// тип объекта – событие |
|
BOOL fInitialState, |
// начальное состояние |
|
LPCTSTR IpName); |
// имя объекта - событие |
В качестве первого параметра (атрибуты защиты) вы можете указать значение NULL.
Параметр fManualReset сообщает системе, хотите Вы создать объект - событие со сбросом вручную (TRUE) или с автосбросом (FALSE).
Параметр fInitialState определяет начальное состояние события: свободное (TRUE) или занятое (FALSE).
После того как система создает объект событие, CreateEvent возвращает идентификатор события, специфичный для конкретного процесса.
Через параметр IpName вы должны передать указатель на имя объекта – событие. Это имя не должно содержать символ "\" и его длина не должна превышать значение МАХ_РАТН.
Задачи из других процессов могут получить доступ к этому объекту следующими способами:
вызовом функции CreateEvent с тем же параметром lpName;
наследованием описателя;
применением функции DuplicateHandle;
вызовом функции OpenEvent c передачей в параметре pszName имени, совпадающего с указанным в аналогичном параметре функции CreateEvent.
Открытие объекта - событие
Зная имя объекта - событие, задача может его открыть с помощью функции OpenEvent, прототип которой приведен ниже:
HANDLE OpenEvent( |
|
|
|
DWORD fdwAccess, |
// требуемый доступ |
|
BOOL fInherit, |
// флаг наследования |
|
LPCTSTR IpName ); |
// адрес имени объекта – событие |
Флаги доступа, передаваемые через параметр fdwAccess, определяют требуемый уровень доступа к объекту - событие. Этот параметр может быть комбинацией следующих значений:
EVENT_ALL_ACCESS |
Приложение получает полный доступ к объекту |
EVENT_MODIFY_STATE |
Приложение может изменять состояние объекта функциями SetEvent и ResetEvent |
SYNCHRONIZE |
Только для Windows NT – прило-жение может использовать объект только в функциях ожидания |
Параметр fInherit определяет возможность наследования полученного идентификатора. Если этот параметр равен TRUE, идентификатор может наследоваться дочерними процессами. Если же он равен FALSE, наследование не допускается.
Через параметр lpName вы должны передать функции адрес символьной строки, содержащей имя объекта - событие.
Управление состоянием объекта - событие
Для перевода объекта - событие в свободное состояние необходимо использовать функцию ResetEvent:
BOOL ResetEvent(HANDLE hEvent);
Для перевода объекта - событие в занятое состояние необходимо использовать функцию SetEvent:
BOOL SetEvent(HANDLE hEvenеt);
