Таймеры. Применение таймеров, страница 3

Функция

Значение

GetTickCount

Возвращает число миллисекунд, прошедших с момента запуска Windows

KillTimer

Удаляет событие таймера и освобождает соответствующие системные ресурсы

QueryPerformanceCounter

Возвращает текущее значение высокоточного счетчика производительности

QueryPerformanceFrequency

Возвращает число приращений в секунду высокоточного счетчика производительности

SetTimer

Создает событие таймера или изменяет параметры настройки события таймера

GetTickCount                           Windows 98   • Windows 2000

Описание

Функция GetTickCount возвращает число миллисекунд, прошедших с момента запуска Windows. Вообще говоря, эта функция вычисляет время, прошедшее между последовательными ее вызовами. Значение, возвращаемое в результате вызовов функции GetTickCount во время обработки сообщений, будет отличаться от значения, возвращаемого функцией GetMessageTime, поскольку GetTickCount возвращает число миллисекунд, прошедших с момента запуска Windows и до момента вызова этой функции, тогда как GetMessageTime — число миллисекунд, прошедших с момента запуска Windows и до момента, когда сообщение поместилось в очередь сообщений.

Синтаксис

DWORD GetTickCount(VOID)

Параметры

Параметры отсутствуют.

Возвращаемое значение

DWORD: Если выполнение рассматриваемой функции оказывается успешным, возвращается число миллисекунд, прошедших с момента запуска системы.

Включаемый файл

winbase.h

См. также

GetMessageTime.

Сообщения, связанные с данной функцией

WM_TIMER

Пример

В приведенном ниже примере демонстрируется использование функции GetTickCount для возврата числа миллисекунд, прошедших с момента запуска системы. Для отображения этого значения достаточно щелкнуть на пункте меню Test!.

См.    \local-sources\chap24\24-01.txt

KillTimer                                 Windows 98   • Windows 2000

Описание

Функция KillTimer удаляет указанный таймер, установленный с помощью функции SetTimer. Эта функция не удаляет сообщения WMJTIMER, уже отправленные в очередь сообщений.

Синтаксис

BOOL Kiimmer(HWND hWnd, UINT uTimerlD)

Параметры

HWnd

HWND: Дескриптор окна, связанного с указанным таймером. Значение этого параметра должно быть аналогично значению, которое передавалось в функцию SetTimer. В случае, когда таймеры не связаны с окнами, можно передать NULL.

uTimerlD

UINT: Идентификатор удаляемого таймера. Если приложение передало функции SetTimer действительный дескриптор окна, тогда значение этого параметра должно быть аналогично идентификатору таймера, переданного в SetTimer. Если же функция SetTimer использовалась в приложении со значением NULL для дескриптора окна, тогда значение этого параметра должно быть аналогично идентификатору таймера, возвращенного функцией SetTimer.

Возвращаемое значение

BOOL: Если выполнение рассматриваемой функции оказывается успешным, возвращается TRUE. В противном случае, если указанный таймер не существует, возвращается FALSE. Если же возникнет ошибка, то для возврата ее кода следует воспользоваться функцией GetLastError.

Включаемый файл

winuser.h

См. также

SetTimer.

Сообщения, связанные с данной функцией WMJTIMER

Пример

Когда пользователь выбирает в приведенном ниже примере пункт меню Test!, таймер устанавливается. Если же пользователь выбирает этот пункт меню еще раз в течение периода времени, определяемого таймером, отображается окно сообщений с сообщением You're fast! (Вы быстры!). Если по истечении периода времени, определяемого таймером, ничего не происходит, отображается окно сообщений с сообщением You're too slow, You lose! (Вы слишком медлительны и поэтому проиграли!). При любом условии перед отображением окна сообщения таймер удаляется.

См.    \local-sources\chap24\24-02. txt

QueryPerformanceCounter             + Windows 98   *•  Windows 2000

Описание

Функция QueryPerformanceCounter осуществляет выборку текущего значения высокоточного счетчика производительности, если таковой существует. Частота обновления этого счетчика определяется значением, которое возвращает QueryPerformanceFrequency. А поскольку это 64-разрядное значение, оно может оказаться более точным, нежели значение, возвращаемое функцией GetTickCount. Столь высокая точность измерения времени требуется, как правило, при определении производительности системы, в которой в течение считанных миллисекунд может произойти большой объем транзакций.

Синтаксис

BOOL QueryPerformanceCounter(LARGE_INTEGER* p Performance Count)

Параметры

pPerformanCount

LARGE INTEGER*: Указатель на 64-разрядное значение, в котором хранится счетчик производительности. Если установленные аппаратные средства не поддерживают высокоточный счетчик производительности, функция вернет 0. Для определения частоты обновления счетчика производительности применяется функция QueryPerformanceFrequency.

Возвращаемое значение

BOOL: Если установленные аппаратные средства поддерживают высокоточный счетчик производительности, возвращается значение TRUE. В противном случае возвращается FALSE.

Включаемый файл

winbase.h

См. также

QueryPerformanceFrequency.

Пример

Когда пользователь выбирает в приведенном ниже примере пункт меню Test!, в окне сообщений отображается текущий отсчет и частота обновления высокоточного счетчика производительности, если только аппаратные

средства поддерживают его. В противном случае появляется окно с сообщением об ошибке.

Си.    \local-sources\chap24\24-03.txt

QueryPerformanceFrequency           Windows 98   • Windows 2000

Описание

Функция QueryPerformanceFrequency выбирает частоту обновления высокоточного счетчика производительности, если установленные аппаратные средства поддерживают такой счетчик. Эта частота представляет собой количество тактов в секунду, подсчитываемых высокоточным счетчиком производительности.

Синтаксис

BOOL QueryPerformanceFrequency (LARGEJNTEGER* plicksPerSecond)

Параметры

рTtcksPerSecond

LARGE_INTEGER*: Указатель на 64-разрядное значение, которое принимает количество приращений в секунду счетчика производительности.

Возвращаемое значение

BOOL: Если установленные аппаратные средства поддерживают высокоточный счетчик производительности, возвращается значение TRUE. В противном случае возвращается FALSE. Для возврата кода ошибки используется функция GetLastError.

Включаемый файл

winbase.h

См. также

QueryPerformanceCounter.

Пример

См. пример применения функции QueryPerformanceCounter.

SetTimer                                Windows 98   • Windows 2000

Описание

Функция SetTimer создает либо видоизменяет системный таймер. Таймер представляет собой планируемое событие, которое Windows формирует через указанные промежутки времени. Таймерами можно воспользоваться для формирования сообщений WMJTIMER либо для организации прямых вызовов функции обратного вызова, определяемой приложением.

Синтаксис

UINT SetTimer(HWND hWnd, UINT uTimerlD , UINT ulnterval, TIMERPROC fiiFimerProc)

Параметры

hWnd

HWND: Окно, связанное с указанным таймером. Это окно должно принадлежать вызывающей нити. Если в этом параметре передается NULL, тогда таймер с окном не связывается, а это означает, что в очереди задач все еще формируются сообщения WMJTIMER, однако они не обрабатываются в обработчике сообщений класса окна, а параметр uTimerlD игнорируется.

uTimerID

UINT: Ненулевое числовое значение, связанное с указанным таймером. Если указывается новый идентификатор, тогда создается таймер. Если же задается существующий идентификатор, тогда рассматриваемая функция внесет поправки в информацию о таймере, а не создаст новый таймер. Если передается 0, система сформирует и вернет неиспользованный идентификатор таймера. Этот параметр игнорируется, если установлено значение NULL параметра hWnd.

iInterval

UINT: Значение временного промежутка в миллисекундах.

nTimerРгос

TIMERPROC: Указатель на функцию обратного вызова, определенную в приложении и уведомляющую об истечении установленного промежутка времени. При передаче NULL сообщения WM_TIMER размещаются в очереди сообщений вызывающей нити. Если же параметр hWnd содержит действительный дескриптор окна, тогда сообщения WM_TIMER будет получать оконная процедура данного окна. В противном случае это сообщение должно быть перехвачено в цикле обработки сообщений, применяемом в вызывающей нити. Синтаксис обратного вызова показан ниже.

Возвращаемое значение

UINT: Если выполнение рассматриваемой функции оказывается успешным, возвращается значение, определяющее новый таймер. Это значение можно использовать в приложении для удаления таймера через функцию KillTimer. Если рассматриваемая функция не может создать таймер, возвращается 0.

Включаемый файл

winuser.h

"м. также

KillTimer.

Сообщения, связанные с данной функцией

WMJTIMER

Синтаксис обратного вызова

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwlime)

Параметры обратного вызова

Wnd

HWND: Дескриптор окна, связанного с указанным таймером.

Msg

UINT: Сообщение WM_TIMER.

dEvent

UINT: Идентификатор таймера.

wTime

DWORD: Количество миллисекунд, прошедших с момента запуска Windows. Это значение, возвращаемое функцией GetTickCount.

Тример

См. пример применения функции KillTimer.

1РЕДУПРЕЖДЕНИЕЗначение, возвращаемое упомянутой выше функцией, представляет собой 32-разрядное количество миллисекунд, прошедших с момента запуска системы. Это значение возвращается к нулю после 49.7 дней (и 2.32 миллисекунд) непрерывной работы системы.  В связи с этим следует иметь в виду,  что прежде чем брать разность во времени,  рассчитанную между двумя последовательными измерениями времени,  необходимо проверить, является ли второе измеренное время меньше первого,  что происходит в случае сброса в 0 отсчета времени в системных часах.