Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];




Вниз

Multimedia timer 


NetBreaker666   (2001-12-23 00:33) [0]

Написал здесь компонент для работы с Multimedia Timer (для тех, кто не в курсе, эьл круче чем прсто TTimer, возможен вызов функции каждую мсек.). Ну так вот, для работы с таймером нужна процедура, с дикими параметрами, да еще и stdcall (понятно, что property Из этого не сделать). Пришлось писать DLL"ку, и каждый новый компонет, передает в нее свой адрес и stdcall"овская процедурка запускает NotifyEvent этого компонента.
У меня вопрос, а можно ли без этого изврата обойтись ??? (И без изврата с динамическим массивом TNotifyEvent"ов)



valery_f   (2001-12-24 11:43) [1]

> а можно ли без этого изврата обойтись?
Нет, тем более, что он не для этого придуман. Не знаю как в NT и двушке, а под 95/98 это единственный способ обеспечить более-менее стабильную работу с хардом. А если ты перегрузишь обработчик - винда повиснет просто наглухо :)) Так что - осторожнее...



Flex   (2001-12-24 14:21) [2]

Господа, что за ...

Создаю, когда надо ->
uTimerID:=timeSetEvent(1,0,@FNTimeCallBack,0,TIME_PERIODIC);

Обрабатываю тики ->
procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
begin
// тут можно что-нибудь умное написать
end;

убиваю, когда надоест -> timeKillEvent(uTimerID);
И вовсе не обязательно для всего подряд компоненты лепить. Проще надо.



Вадим   (2001-12-24 21:46) [3]

Тут про другой таймер говорят



Flex   (2001-12-25 12:06) [4]

?????????? по поводу Вадим ©



NetBreaker666   (2001-12-25 16:07) [5]

Ниифига, я говорю по поводу названного таймера.
А компонент нужен для того, чтобы если у тебя 50 MMTimer"ов, то не лепить
uTimerID:=timeSetEvent(1,0,@FNTimeCallBack,0,TIME_PERIODIC);
50 раз, и вообще, с компонентами работать приятнее.



Вадим   (2001-12-25 23:44) [6]

Multimedia timer



valery_f   (2001-12-26 11:54) [7]

NetBreaker666> ...если у тебя 50 MMTimer"ов...
Мультимедийный таймер опасно просто перегружать, не говоря уже о том, чтобы лепить их 50 штук, т.к. он зовется прямо из ядра винды (был опыт :). Мой совет - заведи список "задач", которые необходимо делать по таймеру. Таймер один, обработчик смотрит что делать в списке. И главное - обеспечить гарантированный выход из обработчика, и чем скорее - тем лучше. Вариант - обработчик генерирует стандартные или твои собственные сообщения, шлет их своему же приложению и тут же завершает работу. Этот таймер - мощный инструмент, но пользоваться им нужно осторожно, т.к. если обработчик еще работает а таймер выдал новый Callback - может быть что угодно (чаще всего - глухое зависание).




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.398 c
14-79453          Andrews               2002-01-09 11:45  2002.02.25  
Для тех кому нравится рассказ:


3-79271           Koks                  2002-01-30 09:27  2002.02.25  
Ну ответьте хоть кто-нибудь...... DbiGetDatabaseDesc


7-79493           Super KOSTYA          2001-11-19 18:32  2002.02.25  
Опять про компоненты


1-79307           TAN                   2002-02-07 10:52  2002.02.25  
Как убрать в DBCtrlGrid полосу прокрутки


1-79367           svv                   2002-02-08 16:40  2002.02.25  
Tedit переход по Enter к следующему Tedit