Використання таймера в додатках

Для відстеження тимчасових проміжків в системі або виконання дій у програмі з необхідною періодичністю в 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 с, іл

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*