Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
17.04.2013
Размер:
129.54 Кб
Скачать

Ожидаемый таймер

"Ожидаемый" таймер - объект синхронизации, состояние которого становится «сигнализирован», когда наступает указанное время. Имеются два типа ожидаемых таймеров: со сбросом вручную и синхронизирующие. Таймер любого типа может также быть периодическим.

Таймер с ручным сбросом.Таймер, состояние которого остается «сигнализирован» до вызова SetWaitableTimer, который устанавливает новое время срабатывания.

Синхронизирующий таймер. Таймер, сигнализированное состояние которого снимается wait функцией.

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

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

HANDLE CreateWaitableTimer(

LPSECURITY_ATTRIBUTES lpTimerAttributes, // pointer to security attributes

BOOL bManualReset, // flag for manual reset state

LPCTSTR lpTimerName // pointer to timer object name

);

Нить вызывает функцию SetWaitableTimer, чтобы инициировать таймер.

BOOL SetWaitableTimer(

HANDLE hTimer, // handle to a timer object

const LARGE_INTEGER *pDueTime, // when timer will become signaled

LONG lPeriod, // periodic timer interval

PTIMERAPCROUTINE pfnCompletionRoutine, // completion routine

LPVOID lpArgToCompletionRoutine, // data for completion routine

BOOL fResume // flag for resume system state

);

Нить может использовать функцию CancelWaitableTimer, чтобы установить таймер в неактивное состояние. Чтобы сбрасывать таймер, вызывается SetWaitableTimer. Для удаления таймера используется вызов CloseHandle.

Неименованый канал (магистраль) - Anonymous pipe

Функция CreatePipe создает неименованный канал и возвращает два дескриптора: дескрипторы чтения и записи. Для взаимодействия по каналу, необходимо передать один из дескрипторов другому процессу. Обычно, это делается через механизм наследования; то есть процесс позволяет дескриптору быть унаследованным дочерним процессом.

BOOL CreatePipe(

PHANDLE hReadPipe, // pointer to read handle

PHANDLE hWritePipe, // pointer to write handle

LPSECURITY_ATTRIBUTES lpPipeAttributes, // security attributes

DWORD nSize // pipe buffer size

);

Чтобы читать из канала, используется дескриптор чтения в запросе ReadFile. ReadFile завершается, когда другой процесс записал данные в канал. Запрос ReadFile может также завершиться, если все дескрипторы записи к каналу были закрыты или если произошла ошибка чтения.

Чтобы записывать в канал, используется дескриптор записи в запросе к функции WriteFile. Запрос WriteFile завершается, когда записано указанное число байтов или происходит ошибка. Если буфер канала полон и еще есть байты для записи, WriteFile не завершается пока другой процесс не считает из канала и не освободит достаточное место для записи оставшихся байт.

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

Соседние файлы в папке вар1