Листинг 7.10.
Определение характеристик мультимедиа-таймера
//Получение максимального периода таймера (мс)
function timeGetMaxPeriod(): Cardinal;
var
time: TTimeCaps;
begin
timeGetDevCaps(Addr(time), SizeOf(time));
timeGetMaxPeriod := time.wPeriodMax;
end;
//Получение минимального периода таймера (мс)
function timeGetMinPeriod(): DWORD;
var
time: TTimeCaps;
begin
timeGetDevCaps(Addr(time), SizeOf(time));
timeGetMinPeriod := time.wPeriodMin;
end;
Итак, мы знаем, как получать параметры таймера. Но было сказано, что его точность можно регулировать. Делается это при помощи функций timeBeginPeriod и timeEndPeriod.
• Первая функция вызывается для установления минимальной точности таймера, которая устраивает приложение. Функция timeBeginPeriod принимает значение требуемой точности таймера в миллисекундах, возвращает TIMERR_NOERROR в случае успеха либо Т IMERR_NOCANDO, если требуемая точность не может быть обеспечена.
• Вторая функция восстанавливает точность таймера такой, какой она была до вызова функции timeBeginPeriod. В функцию timeEndPeriod должно передаваться то же значение, что и в функцию timeBeginPeriod.
В листинге 7.11 показано использование функци и timeBeginPeriod, атакже timeEndPeriod (реализованы функции-оболочки). При пользовании функциями из листинга 7.11 нужно помнить, что после вызова timeSetTimerPeriod и проведения измерения обязательно должна быть вызвана timeRestoreTimerPeriod. Функция timeSetTimerPeriod сохраняет значение установленной точности таймера в глобальной переменной lastPeriod, чтобы можно было не заботиться о сохранении этого значения в коде, использующем таймер.