Книга: Системное программирование в среде Windows
Пример: использование таймера ожидания
В программе 14.3 демонстрируется применение таймера ожидания для генерации периодических сигналов.
Программа 14.3. TimeBeep: генерация периодических сигналов
/* Глава 14. TimeBeep.с. Периодическое звуковое оповещение. */
/* Использование: TimeBeep период (в миллисекундах). */
#include "EvryThng.h"
static BOOL WINAPI Handler(DWORD CntrlEvent);
static VOID APIENTRY Beeper(LPVOID, DWORD, DWORD);
volatile static BOOL Exit = FALSE;
HANDLE hTimer;
int _tmain(int argc, LPTSTR argv[]) {
DWORD Count = 0, Period;
LARGE_INTEGER DueTime;
/* Перехват нажатия комбинации клавиш <Ctrl-c> для прекращения операции. См. главу 4. */
SetConsoleCtrlHandler(Handler, TRUE);
Period = _ttoi(argv[1]) * 1000;
DueTime.QuadPart = –(LONGLONG)Period * 10000;
/* Параметр DueTime отрицателен для первого периода ожидания и задается относительно текущего времени. Период ожидания измеряется в мс (10-3 с), a DueTime — в единицах по 100 нc (10-7 с) для согласования с типом FILETIME. */
hTimer = CreateWaitableTimer(NULL, FALSE /* "Таймер синхронизации" */, NULL);
SetWaitableTimer(hTimer, &DueTime, Period, Beeper, &Count, TRUE);
while (!Exit) {
_tprintf(_T("Count = %dn"), Count);
/* Значение счетчика увеличивается в процедуре таймера. */
/* Войти в состояние дежурного ожидания. */
SleepEx(INFINITE, TRUE);
}
_tprintf(_T("Завершение. Счетчик = %d"), Count);
CancelWaitableTimer(hTimer);
CloseHandle(hTimer);
return 0;
}
static VOID APIENTRY Beeper(LPVOID lpCount, DWORD dwTimerLowValue, DWORD dwTimerHighValue) {
*(LPDWORD)lpCount = *(LPDWORD)lpCount + 1;
_tprintf(_T("Генерация сигнала номер: %dn"), *(LPDWORD) lpCount);
Веер(1000 /* Частота. */, 250 /* Длительность (мс). */);
return;
}
BOOL WINAPI Handler(DWORD CntrlEvent) {
Exit = TRUE;
_tprintf(_T("Завершение работыn"));
return TRUE;
}
- Таймеры ожидания
- Комментарии к примеру с таймером ожидания
- Пример установочного скрипта
- Пример из практики
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Использование констант
- Ограничение времени ожидания для транзакций (Lock timeout)
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата