Архитектура вычислительных машин и систем / OS WINDIWS и время
.docЩупак Ю. А.
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).
