.RU

Мультимедийные таймеры - К. Г. Финогенов Лабораторный практикум «Основы разработки приложений Windows»


^ Мультимедийные таймеры
Основным недостатком обычных таймеров Windows является невысокая предельная частота (18,2 Гц) и, как следствие этого, низкое временное разрешение (55 мс). Если воспользоваться таким таймером для плавного перемещения изображения какого-либо объекта по экрану, то при разрешении экрана 800600 пикселов объект затратит на прохождение всего экрана по горизонтали более 40 с, т. е. движение его будет чрезвычайно медленным. Для получения более высоких скоростей перемещения и для отсчета интервалов времени с более высокой точностью можно использовать мультимедийные таймеры, предельное разрешение которых составляет 1 мс, что соответствует частоте 1 кГц.

Для работы с мультимедийными таймерами предусмотрена небольшая группа специальных функций, имена которых начинаются со слова time (начинающегося со строчной буквы, что нетипично для имен функций Windows).

Рассмотрим несколько вариантов установки и использования мультимедийного таймера.
^ Измерение интервалов времени
В процессе оптимизации программ может возникнуть необходимость измерить время выполнения того или иного фрагмента программы. Для этого можно использовать мультимедийную функцию timeGetTime(), которая возвращает время в миллисекундах, истекшее от последней загрузки операционной системы:

^ DWORD t1,t2,t3;//Переменные для записи времени

t1=timeGetTime();

...//Контролируемый фрагмент программы

t2=timeGetTime();

t3=t2-t1;//Время выполнения контролируемого фрагмента в мс
^ Организация периодического процесса
Установка и использование мультимедийного таймера требует выполнения целого ряда действий. Прежде всего с помощью функции timeBeginPeriod() задается требуемое временное разрешение устанавливаемого таймера в миллисекундах. Хотя минимальное значение параметра этой функции составляет 1 мс, однако следует иметь в виду, что установленный таймер активно использует ресурсы операционной системы и при малом значении времени разрешения или при установке нескольких таймеров системе может не хватить ресурсов, что приведет к ее аварийной остановке.

Следующим этапом является установка временного события, которая выполняется с помощью функции timeSetEvent(). В качестве параметров этой функции указывается, в частности, временной интервал срабатывания таймера, а также адрес той прикладной функции обратного вызова, которая будет активизироваться при каждом его срабатывании.

Уничтожение мультимедийного таймера требует вызова двух функций: timeEndPeriod(), отменяющей установленное ранее разрешение таймера, и timeKillEvent(), которая прекращает действие всех системных процессов, связанных с работой мультимедийного таймера.

Фрагмент программы, в которой устанавливается мультимедийный таймер, может выглядеть таким образом:

timeBeginPeriod(1);//Установим максимальное разрешение

^ MMRESULT mmr=timeSetEvent(5,1,TimeProc,0,TIME_PERIODIC);

...//Продолжение программы

В качестве параметров функции timeSetEvent() указывается период его срабатывания (5 мс в примере), значение установленного ранее разрешения (1 мс), имя прикладной функции обработки прерываний от таймера (например, TimeProc), произвольное данное пользователя, которое будет передано в эту функцию (у нас 0), а также символическая константа, задающая режим работы таймера. Функция установки таймера возвращает (в переменную типа MMRESULT) его номер, назначаемый системой и используемый затем нами при уничтожении данного таймера.

Прикладная функция TimeProc(), вызываемая в данном примере каждые 5 мс, предназначена для выполнения требуемых периодических действий. Сложность, однако, заключается в том, что в этой функции запрещен вызов каких-либо функций Windows, кроме мультимедийных, а также функции PostQuitMessage(). В результате типичный текст функции TimeProc() выглядит сле­дующим образом:

void CALLBACK TimeProc(UINT,UINT,DWORD,DWORD,DWORD){

PostMessage(hwnd,WM_USER,(WPARAM)parm1,(LPARAM)parm2);

}

Вызов функции PostMessage() приводит к посылке в окно hwnd нашего приложения сообщения пользователя с кодом ^ WM_USER, в состав которого входят два произвольных параметра parm1 и parm2. Для Windows код WM_USER (он равен 0x400), при использовании его в рамках окон прикладных классов, ничего не значит, так как стандартные сообщения Windows имеют коды от 0 до WM_USER–1, однако мы можем обрабатывать сообщение WM_USER в нашей оконной функции наравне с остальными (системными) сообщениями:

^ LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,

WPARAM wParam,LPARAM lParam){

switch(msg){

HANDLE_MSG(hwnd,WM_CREATE,OnCreate);

HANDLE_MSG(hwnd,WM_PAINT,OnPaint);

HANDLE_MSG(hwnd,WM_DESTROY,OnDestroy);

... //Обработка других сообщений Windows

default:

return(DefWindowProc(hwnd,msg,wParam,lParam));

case WM_USER:

OnUser(wParam,lParam);//Вызов прикладной функции

//обработки сообщений от мультимедийного таймера

}

}

На выполнение прикладной функции OnUser(), которой через ее аргументы wParam и lParam передаются (при необходимости) наши параметры parm1 и parm2, уже не накладывается никаких ограничений; в ней можно выполнять любые действия и, в частности, вызывать любые функции Windows. Следует только иметь в виду, что функция OnUser() не вызывается непосредственно прерыванием от таймера; сообщение WM_USER поступает в очередь сообщений приложения, а функция OnUser() будет вызвана, лишь когда дойдет очередь до обработки этого сообщения. Описанный здесь механизм иногда называют отсроченной или отложенной обработкой.

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

timeEndPeriod(1);//Указывается заданное ранее разрешение

timeKillEvent(mmr);//Указывается номер данного таймера
^ Задание однократного интервала времени
При необходимости отработки однократного интервала времени необходимо выполнить все описанные выше действия, только в качестве режима установки временного события указывается константа TIME_ONESHOT:

timeBeginPeriod(1);//Установим максимальное разрешение

mmr=timeSetEvent(1000,1,TimeProc,0,TIME_ONESHOT);

...//Продолжение программы

void CALLBACK TimeProc(UINT,UINT,DWORD,DWORD,DWORD){

PostMessage(hwnd,WM_USER,(WPARAM)parm1,(LPARAM)parm2);

time EndPeriod(1);//Отмена установленного ранее разрешения

..timeKillEvent(mmr);//В предположении, что mmr – глобальная

} // переменная

В данном варианте сообщение WM_USER посылается лишь один раз по истечении точно 1с (с погрешностью в 1 мс). В прикладной функции TimeProc обработки этого сообщения, помимо активизации содержательных действий (посредством посылки сообщения WM_USER), необходимо отменить установленное ранее временное разрешение, как это и показано в приведенных выше строках.

obyazannosti-dolzhnostnih-lic-pri-likvidacii-avarii-zagoranii-elektromehanicheskoe-oborudovanie-anof-2-so-specialnoj.html
obyazannosti-komitetov-konkurs-na-luchshuyu-rabotu-po-russkoj-istorii-nasledie-predkov-molodim-2008.html
obyazannosti-prochih-lic-uchastvuyushih-v-likvidacii-avarii.html
obyazannosti-rukovoditelya-servisnogo-ceha-posobie-adresovano-visshim-rukovoditelyam-i-menedzheram-kompanij-dejstvuyushih.html
obyazatelnaya-chast-umk-stranica-5.html
obyazatelnaya-literatura-programmi-i-zadaniya-fen-po-specialnost-biologiya.html
  • pisat.bystrickaya.ru/trebovaniya-stranica-16.html
  • nauka.bystrickaya.ru/valyutnij-kurs-ego-vidi-i-faktori-formirovaniya-principi-funkcionirovaniya-vto.html
  • occupation.bystrickaya.ru/novij-zavet-stranica-48.html
  • composition.bystrickaya.ru/po-informacii-spasatelej-avtomobili-zagorelis-po-neizvestnoj-prichine.html
  • uchit.bystrickaya.ru/tema33biologo-socialnie-chs-i-ih-obshaya-harakteristika-programma-uchebnoj-disciplini-zashita-naseleniya-i-territorij.html
  • obrazovanie.bystrickaya.ru/primernaya-programma-disciplini-sd-f-06-sborka-yustirovka-i-kontrol-optiko-elektronnih-priborov-rekomenduetsya-minobrazovaniem-rossii-dlya-specialnosti.html
  • student.bystrickaya.ru/-burilshik-shpurov-2-vagonetchik-vozdushno-kanatnoj-dorogi-3.html
  • institut.bystrickaya.ru/tel-3422-37-37-83-faks-3422-37-31-55-e-mail-oispermcntiru-kursi-tehnicheskoe-obsluzhivanie-i-remont-promishlennogo.html
  • tests.bystrickaya.ru/kursovoj-proekt-na-temu.html
  • paragraph.bystrickaya.ru/laboratornaya-rabota-izuchenie-sredstv-upravleniya-windows.html
  • zanyatie.bystrickaya.ru/obespechenie-preemstvennosti-poyasnitelnaya-zapiska-2-harakteristika-uchastnikov-obrazovatelnoj-deyatelnosti-princip-raboti-shkoli.html
  • otsenki.bystrickaya.ru/sekti-globalnaya-problema-sovremennogo-obshestva.html
  • holiday.bystrickaya.ru/metodologiya-vnedreniya-onemethodology-biznes-informatika.html
  • shkola.bystrickaya.ru/moler-chast-2.html
  • desk.bystrickaya.ru/podstrojka-po-slovaryam-zakon-ob-avtorskom-prave-i-smezhnih-pravah.html
  • occupation.bystrickaya.ru/mezhregionalnij-istoriko-patrioticheskij-konkurs-morskoj-venok-slavi-nikolaj-gerasimovich-kuznecov.html
  • laboratornaya.bystrickaya.ru/reabilitologiya-uchebnoe-posobie-rekomendovano-uchebno-medicinskim-obedineniem-po-medicinskomu-i-farmacevticheskomu.html
  • tetrad.bystrickaya.ru/voprosi-i-zadaniya-uchebnoe-posobie-v-pomosh-uchashimsya-obsheobrazovatelnih-shkol.html
  • uchenik.bystrickaya.ru/istoriya-rossii-shpargalka.html
  • tetrad.bystrickaya.ru/vnuchke-katenke-pedagogu-xxi-veka-posvyashayu.html
  • pisat.bystrickaya.ru/tema-6-anatomo-fiziologicheskie-osobennosti-sozrevaniya-mozga-tema-zakonomernosti-rosta-i-razvitiya-detskogo-organizma.html
  • predmet.bystrickaya.ru/rukovodstvo-po-osnovannomu-na-ocenke-riska-podhodu-dlya-buhgalterov-17-iyunya-2008-g.html
  • abstract.bystrickaya.ru/1-sra-orta-blmn-zhaartilan-mazmnina-kshu-zhaartilan-blm-mazmni-ne-shn-azhet.html
  • control.bystrickaya.ru/demokratiyali-zhalpltti-kshter-koaliciyasini-msheler-lt-zhospari-100-nati-adamdi-talilajdi-2015-zhildi-18-mausiminda-azastan-2050.html
  • znanie.bystrickaya.ru/aortalnaya-nedostatochnost-lekciya-serdechnie-shumi-mehanizm-obrazovaniya.html
  • urok.bystrickaya.ru/pravila-tekushego-remonta-i-tehnicheskogo-obsluzhivaniya-elektrovozov-postoyannogo-toka-stranica-9.html
  • knowledge.bystrickaya.ru/obshie-itogi-finansovogo-sostoyaniya-za-2006-god-otkritoe-akcionernoe-obshestvo-af-bank.html
  • esse.bystrickaya.ru/razdel-i-obshie-polozheniya-sostavleniya-i-predstavleniya-form-otchetnosti-kreditnih.html
  • credit.bystrickaya.ru/plan-meropriyatij-pravitelstva-chelyabinskoj-oblasti-ob-oblastnoj-celevoj-programme-deti-yuzhnogo-urala-na-2011-2015-godi-meropriyatiya-programmi-osushestvlyayutsya-po-pyati-napravleniyam.html
  • kontrolnaya.bystrickaya.ru/psihologiya-lichnosti-prestupnika-psihologicheskie-osobennosti-otdelnih-kategorij-prestupnikov.html
  • zanyatie.bystrickaya.ru/pishevaya-cennost-ovoshej-chast-8.html
  • exchangerate.bystrickaya.ru/grrudzite-nkrerih-i-pribaltika-izobrazitelnoe-iskusstvo.html
  • reading.bystrickaya.ru/meropriyatiya-po-umensheniyu-mezhdunarodnie-sertifikati-iso-9001-2000-i-iqnet.html
  • institut.bystrickaya.ru/tajnaya-doktrina-stranica-11.html
  • writing.bystrickaya.ru/45-zolotoe-pravilo-psihologii-truda-1-psihologiya-truda-kak-oblast-realii-otrasl-nauki-uchebnaya-disciplina-i-professiya.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.