Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
116
Добавлен:
18.05.2015
Размер:
26.62 Кб
Скачать

Щупак Ю. А.

Win32 API. Эффективная разработка приложений.

- СПб.: Питер, 2007. - 572 с: ил.

ISBN 5-469-01361-8

В этой книге изложены основополагающие принципы программирования для Windows на языке С/С++ с применением Win32 API.

Глава 10. Таймеры и время

При решении некоторых задач программа должна отслеживать текущее время

или выполнять какие-либо действия с определенной периодичностью. Например,

эта проблема возникает в приложениях, имитирующих аппаратуру, работающую

в реальном масштабе времени, в игровых и мультимедийных приложениях, а

также при проведении различных тестов. Кроме того, иногда требуется отладить

критичные ко времени исполнения фрагменты кода, для чего нужен <хронометр>

с высокой разрешающей способностью.

Win32 API содержит как функции для измерения текущего времени, так и

функции для создания виртуальных таймеров - устройств, извещающих приложение

об истечении заданного интервала времени. Для успешного применения этих

программных средств необходимо учитывать их разрешающую способность и

потенциальную точность измерения.

Непосредственный доступ к физическому машинному таймеру (часам CMOS), как и другим аппаратным средствам компьютера в Windows запрещен.

Важно понимать, что многозадачная операционная система Windows не

является системой реального времени, поэтому любой виртуальный таймер в Windows не

может гарантировать какой бы то ни было фактической точности отсчета

временного интервала. Ведь в любой момент времени система может прервать выполнение

вашего приложения, чтобы дать возможность поработать другому приложению

(простой, вызванный прерыванием, чаще всего длится от 1 до 30 мс1)- Вероятность

таких прерываний тем ниже, чем меньше рассматриваемый временной интервал

и чем меньше других программ работает одновременно с вашим приложением. В то

же время, как показывают эксперименты, мультимедийный таймер Windows

обеспечивает вполне приемлемую фактическую точность отсчета временных

интервалов для многих задач.

В этой главе кроме функций Win32 API мы рассмотрим также использование

ассемблерной команды rdtsc для реализации <хронометра> с высокой

разрешающей способностью.

Время Windows

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

операционной системы. Этот формат времени поддерживается для обратной совме-

Указанная здесь нижняя граница весьма приблизительна и относится к тому случаю, когда

системный диспетчер потоков выделяет очередной квант этому же приложению.

Системное время

Для совместимости с 16-разрядными версиями Windows. Время Windows хранится в виде

32-разрядного целого числа без знака, которое сбрасывается в нулевое значение

после того, как Windows проработает примерно 49,7 дней.

Операционная система управляет временем Windows через прерывания

системного таймера, добавляя к текущему значению времени Windows приращение,

равное периоду работы системного таймера. Кроме того, система периодически

синхронизирует время Windows с показаниями часов реального времени, то есть

с системным временем, рассматриваемым ниже.

Системный таймер Windows - это программное устройство, находящееся под

управлением операционной системы (в отличие от аппаратного таймера, с

которым работали программы под управлением MS-DOS).