Читаем Delphi. Трюки и эффекты полностью

Пример использования этой функции приведен в листинге 7.12, а теперь несколько слов о том, как получить для рассматриваемого таймера значения минимальной и максимальной точности. Для получения этих данных можно использовать функцию timeGetDevCaps. Она принимает в качестве параметра структуру TTimeCaps и заполняет два ее поля соответствующими значениями. В листинге 7.10 приводится возможная реализация функций для определения характеристик мультимедийного таймера.

...

Листинг 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, чтобы можно было не заботиться о сохранении этого значения в коде, использующем таймер.

...

Листинг 7.11. Функции изменения точности таймера

Var lastPeriod: Cardinal;

//Установка периода таймера (мс) перед началом измерения

function timeSetTimerPeriod(period: Cardinal): Boolean;

begin

if timeBeginPeriod(period) = TIMERR_NOERROR then

begin

//Сохраним значение для восстановления состояния таймера

lastPeriod := period;

timeSetTimerPeriod := True;

end

else

//Неудача

timeSetTimerPeriod := False;

end;

//Восстановление периода таймера (обязательно)

function timeRestoreTimerPeriod(): Boolean;

begin

if timeEndPeriod(lastPeriod) = TIMERR_NOERROR then

timeRestoreTimerPeriod := True

else

timeRestoreTimerPeriod := False;

end;

Теперь, после долгого рассмотрения особенностей настройки мультимедиа-таймера, приведем пример его использования для измерения времени выполнения простейшего отрезка программы (листинг 7.12).

...

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Мейерс , Скотт Майерс

Программирование, программы, базы данных / Программирование / Книги по IT