Объекты синхронизации, чьё состояние устанавливается в доступное через определённый интервал времени. Существуют следующие виды таймеров:
1. Таймер со сбросом вручную. Таймер, чьё состояние остаётся доступным до тех пор пока не будет вызвана функция SetWaitableTimer – установить таймер ожидания для установки нового периода времени.
2. Таймер синхронизации. Автосбрасывается когда поток заканчивает ожидание.
3. Периодический таймер. Переактивируется каждый раз, когда истекает период срабатывания. Переактивизация происходит до тех пор пока таймер не будет сброшен или отменён.
• Для создания таймеров используется функция
HANDLE CreateWaitableTimer(
LPSECURITY_ATTRIBUTES sa,
BOOL ManualRese,
LPTSTR TimeName)
• Для активизации
BOOL SetWaitableTimer(
HANDLE hTimer,
Const LARGE_INTEGER* time,
LONG Period;
PTIMERAPCROUTINE routine,
LPVOID ArgRoutine,
BOOL Resume)
1-Описывает, какой таймер устанавливается.
2-Время, когда сработает таймер(100 нс)
3-Период, через какое время повторить срабатывание (мс)
4-Указатель на функцию, которая будет вызываться при срабатывании таймера
5-Параметр описывает для Routine аргументы
6-Позволяет работу таймера в спящем режиме.
• Отмена таймера СancelWaitableTimer (HANDLE hTimer)
VOID APIENTRY TimerAPCRoutine(
LPVOID lpArgtoCompletionRoutine,
DWORD dwTimerLowValue,
DWORD dwTimerHighValue)
Пример:
HANDLE hTimer;
SYSTEMTIME st;
FILETIME ftlocal, ftutc;
…………..
hTimer = CreateWaitableTimer(NULL,FALSE,NULL) ;
st.wYear=2000;
st.wMonth=2;
st.wDayOf Week=0;
st. WHour=12;
st.wDay=19;
st.wMinute=30;
st.wSecond=0;
st. MillSecond=0;
SystemTimeToFileTime (&st, &ftlocal);
LocalTimeToFileTime (&ftlocal, ftutc);
SetWaitableTimer (hTime,(PLARGE_INTEGER)&ftutc,10*60*1000,NULL,NULL,FALSE);
//—
__int64 time=-5*1000;
SetWaitableTimer (hTime,(PLARGE_INTEGER)&time,60*60*1000,NULL,NULL,FALSE);
//—
void Sleep (dword MylliSeconds);
