Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Ожидаемые таймеры (waitable timers) – это объекты ядра, которые самостоятельно переходят в свободное состояние в определенный момент или через определенные интервалы. Ожидаемый таймер создается вызовом функции CreateWaitableTimer:

HANDLE CreateWaitableTimer(

LPSECURITY_ATTRIBUTES lpTimerAttributes, // SD

BOOL bManualReset, // reset type

LPCTSTR lpTimerName // object name

);

По аналогии с событиями, параметр bManualReset определяет тип таймера – с автоматическим или ручным сбросом. Дескриптор ожидаемого таймера также может быть получен с помощью функции OpenWaitableTimer.

После создания объект таймер находится в занятом состоянии. Чтобы установить момент времени, в который он должен перейти в активное состояние, нужно вызвать функцию SetWaitableTimer:

BOOL SetWaitableTimer(

HANDLE hTimer, // handle to timer

const LARGE_INTEGER* pDueTime, // timer due time

LONG lPeriod, // timer interval

PTIMERAPCROUTINE pfnCompletionRoutine, // completion routine

LPVOID lpArgToCompletionRoutine, // completion routine parameter

BOOL fResume // resume state

);

Параметр pDueTime задает момент первого срабатывания таймера. Значение этого параметра представляет собой указатель на 64-х битное значение, представляющее число 100-наносекундных интервалов с 1 января 1601 года по Гринвичу. Информацию по работе с такими значениями можно найти в описании структуры FILETIME Windows API.

Если нас не интересует абсолютное время срабатывания таймера, а нужно чтобы он сработал через определенный промежуток времени, то мы можем использовать относительное время, указав отрицательное значение DueTime.

Параметр lPeriod определяет периодичность срабатывания таймера. Если это значение равно 0, то таймер сработает только один раз, в момент определенный параметром pDueTime. Положительное значение lPeriod заставит таймер периодически срабатывать через заданное число миллисекунд.

Параметр fResume позволяет использовать таймер, даже если компьютер находится в режиме пониженного энергопотребления (если эта функция поддерживается компьютером). Значение TRUE заставит компьютер выйти из режима пониженного потребления и активировать таймер.

Оставшиеся параметры используются для асинхронного вызова процедуры в момент активации таймера.

Таймер с ручным сбросом перейдет в активное состояние в заданный момент, и будет оставаться активным до тех пор, пока функция SetWaitableTimer не будет вызвана еще раз. Таймер с автосбросом остается свободным только до тех пор, пока на нем не будет успешно выполнена одна из Wait-функций.

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

«Отключить» таймер можно функцией CancelWaitableTimer:

BOOL CancelWaitableTimer(

HANDLE hTimer // handle to timer

);

Эта функция переводит таймер в неактивное состояние.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал