Пример: использование таймера ожидания

Пример: использование таймера ожидания

В программе 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 = %d "), 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("Генерация сигнала номер: %d "), *(LPDWORD) lpCount);

 Веер(1000 /* Частота. */, 250 /* Длительность (мс). */);

 return;

}

BOOL WINAPI Handler(DWORD CntrlEvent) {

 Exit = TRUE;

 _tprintf(_T("Завершение работы "));

 return TRUE;

} 

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Пример: использование функции фильтра

Из книги Системное программирование в среде Windows автора Харт Джонсон М

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


Пример: использование базовых указателей

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

Пример: использование базовых указателей Рассмотренные выше примеры относились к сортировке файлов в различных ситуациях. Вместе с тем, должно быть очевидным, что наша цель состояла не в обсуждении методик сортировки, а в демонстрации применения различных методов


Пример: использование указательных типов данных

Из книги Операционная система UNIX автора Робачевский Андрей М.

Пример: использование указательных типов данных Аргументом потока, передаваемым функции потока при вызове CreateThread и _beginthreadex (см. главу 7), является указатель типа PVOID. Иногда программист может захотеть передать функции потока только целочисленное значение, указывающее,


Источники прерываний таймера

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Источники прерываний таймера На этом мы, пожалуй, закончим наш краткий экскурс по стране таймеров и перейдем к вещам, которые уже не так очевидны.Откуда возникают прерывания таймера? На рисунке ниже приведены аппаратные компоненты (и некоторые характерные для PC значения


Создание таймера

Из книги Разработка ядра Linux автора Лав Роберт

Создание таймера Первый этап — это создание таймера с помощью функции timer_create():#include <time.h>#include <sys/siginfo.h>int timer_create(clockid_t clock_id, struct sigevent *event, timer_t *timerid);Аргумент clock_id сообщает функции timer_create(), на какой временном базисе вы формируете таймер. Это вещь из области POSIX —


Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя #!/bin/bash# timeout.sh# Автор: Stephane Chazelas,# дополнен автором документа.INTERVAL=5 # предел времени ожиданияtimedout_read() { timeout=$1 varname=$2 old_tty_settings=`stty -g` stty -icanon min 0 time ${timeout}0 eval read $varname # или просто read $varname


Пример 9-4. Ограничение времени ожидания команды read

Из книги автора

Пример 9-4. Ограничение времени ожидания команды read #!/bin/bash# t-out.sh TIMELIMIT=4 # 4 секундыread -t $TIMELIMIT variable <&1echoif [ -z "$variable" ]then echo "Время ожидания истекло."else echo "variable = $variable"fi exit 0$UIDuser id numberUID (идентификатор) текущего пользователя, в соответствии с /etc/passwdЭто реальный UID текущего


Пример 10-24. Использование case

Из книги автора

Пример 10-24. Использование case #!/bin/bashecho; echo "Нажмите клавишу и затем клавишу Return."read Keypresscase "$Keypress" in [a-z] ) echo "буква в нижнем регистре";; [A-Z] ) echo "Буква в верхнем регистре";; [0-9] ) echo "Цифра";; * ) echo "Знак пунктуации, пробел или что-то другое";;esac # Допускается указыватль


Пример 22-9. Использование локальных переменных при рекурсии

Из книги автора

Пример 22-9. Использование локальных переменных при рекурсии #!/bin/bash# факториал# ---------# Действительно ли bash допускает рекурсию?# Да! Но...# Нужно быть действительно дубинноголовым, чтобы использовать ее в сценариях# на языке командной


Обработка прерываний таймера

Из книги автора

Обработка прерываний таймера Каждый компьютер имеет аппаратный таймер или системные часы, которые генерируют аппаратное прерывание через фиксированные интервалы времени. Временной интервал между соседними прерываниями называется тиком процессора или просто тиком (CPU


Пример: использование функций gethostbyname и getservbyname

Из книги автора

Пример: использование функций gethostbyname и getservbyname Теперь мы можем изменить код нашего TCP-клиента времени и даты, показанный в листинге 1.1, так, чтобы использовать функции gethostbyname и getservbyname и принимать два аргумента командной строки: имя узла и имя службы. Наша программа


Частота импульсов таймера: HZ

Из книги автора

Частота импульсов таймера: HZ Частота системного таймера (частота импульсов, tick rate) программируется при загрузке системы на основании параметра ядра НZ, который определен с помощью директивы препроцессора. Значение параметра HZ отличается для различных поддерживаемых


Обработчик прерываний таймера

Из книги автора

Обработчик прерываний таймера Теперь, когда мы разобрались, что такое jiffies и HZ, а также какова роль системного таймера, рассмотрим реализацию обработчика прерываний системного таймера. Обработчик прерываний таймера разбит на две части: часть, зависимую от аппаратной


Пример использования таймера

Из книги автора

Пример использования таймера Данная программа выводит 1 каждые 100 миллисекунд в течение 3 секунд:uses Timers;procedure TimerProc;beginwrite(1);end;begin var t := new Timer(100,TimerProc);t.Start;Sleep(3000);end.Вызов Sleep здесь обязателен, иначе программа после создания таймера сразу закончится, и обработчик таймера ни