Главная » Win32 API » Использование таймера в приложениях

0

Для отслеживания временных промежутков в системе или выпол­нения действий в программе с требуемой периодичностью в Win32 реализован ряд API-функций. При работе с ними необходимо помнить, что Windows не является ОС реального времени, и точность подсчета времени зависит от возникновения прерываний в системе и количества одновременно запущенных приложений. Под временем Windows по­нимается количество миллисекунд, прошедших с момента старта ОС. Это время увеличивается на период системного таймера, и дополни­тельно синхронизируется с часами реального времени RTC (Real Time Clock).

Для получения текущего значения времени Windows используется функция GetTickCount, возвращающая число миллисекунд с момента старта ОС. Параметров функция не имеет. GetTickCount очень удобно использовать для измерения времени выполнения фрагмента програм­мы, вызвав ее 2 раза до начала фрагмента и после фрагмента:

tl=GetTickCount();

// фрагмент кода t2= GetTickCount() ; t3=t2-tl;

Наряду с временем Windows существует понятие системного вре­мени это текущее время по Гринвичу (часы, минуты, секунды и мил­лисекунды) и дата (день недели, число, месяц, год). Для получения системного времени используется функция GetSystemTime, парамет­ром которой является указатель на структуру типа SYSTEMTIME. Для получения времени, отражаемого на компьютере, используется GetLo-calTime.

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

-  дескриптор окна, связанного с таймером. Если дескриптор не ука­зан, то сообщения от таймера посылаются в его собственную функцию обработки сообщений;

-  идентификатор таймера (целое число, большее нуля), если пред­полагается использовать несколько таймеров;

-  интервал от 1 до 4294967295 мс, что соответствует 50 дням. Ин­тервал указывает периодичность посылки сообщения от таймера WMTIMER либо оконной функции окна с указанным дескриптором, либо собственной функции таймера;

-  адрес функции обработки сообщений таймера или NULL, если обработка происходит в оконной функции. Собственная функция об­работки сообщений от таймера должна быть объявлена с атрибутом CALLBACK.

Для уничтожения таймера, после того как в нем исчезла надоб­ность, используется функция KillTimer, которой передаются дескрип­тор окна и идентификатор таймера, который надо уничтожить.

Отметим, что если сообщение WMTIMER не успевает обрабо­таться с нужной периодичностью, то в очереди эти сообшения не на­капливаются, а объединяются в одно сообщение WMTIMER, и потеря сообщений никак не фиксируется в системе. Это может приводить к существенному разбросу реального интервала срабатывания таймера.

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

По теме:

  • Комментарии