Апр 28

Мультимедийный таймер

Для использования в вашем приложении мультимедийного таймера необходимо подключить к проекту мультимедийную библиотеку winmm.lib1 и добавить в начало файла, в котором вызываются функции библиотеки, следующую директиву:
finclude
Содержащаяся в библиотеке функция timeGetDevCaps позволяет узнать поддерживаемое системой разрешение мультимедийного таймера. Для этого определите переменную структурного типа
TIMECAPS tc: и вызовите функцию
timeGetDevCaps(&tc, sizeof(TIMECAPS));
В результате этого вызова поля tc.wPeriodMin и tc.wPeriodMax будут содержать минимальное и максимальное разрешения в миллисекундах, поддерживаемые для мультимедийного таймера. Для нашего компьютера, например, были получены значения 1 мс и 1 000 000 мс соответственно.
Мультимедийная библиотека содержит функции timeBeginPeriod и timeEndPeriod, предназначенные для установки и отмены конкретного разрешения мультимедийного таймера. Величина разрешения в миллисекундах передается в виде параметра в обеих функциях.
MSDN рекомендует вызывать функцию timeBeginPeriod(tc.wPeriodMin) непосредственно перед тем, как обратиться к сервису мультимедийного таймера. Повышенное разрешение таймера, по-видимому, реализуется в системе при помощи создания отдельного потока с высоким приоритетом выполнения. Поэтому рекомендуется отменять режим повышенного разрешения таймера (timeEndPeriod), как только он перестает быть нужным.
Ранее мы уже использовали функции timeBeginPeriod и timeEndPeriod для повышения точности работы функции Sleep. Степень влияния этих функций на работу собственно мультимедийного таймера мы выясним, когда проведем эксперименты с тестовой программой.