Текущий архив: 2007.01.21;
Скачать: CL | DM;
Вниз
Как во время убить мультимедиа таймер? Найти похожие ветки
← →
Alex_C © (2006-11-29 09:15) [0]В моей проге для обеспечения точного времени вызова события используется мультимедиа таймер. У пользователя есть возможность изменять время работы события. При измененни времени события я делаю так:
// Убиваем старый траймер
timeKillEvent( mmResult );
// Создаем новый таймер с новым временем срабатывания
mmResult := TimeSetEvent(NewTimeInterval, 0, @TimerCallBack, 0, TIME_PERIODIC);
Однако вот в чем проблема - при этом необходимо, чтобы последнее время срабатывания таймера сохранилось (допустим, время срабатывания таймера 5 сек. Пользователь указал таймеру новое время срабатывания 6 сек. Однако это произошло на 2 сек работе таймера - т.е. не убивать таймер, пока не закончится последнее срабатывание таймера, а затем промежуток уже сделать 6 сек). Как это более правильно сделать?
← →
Чапаев © (2006-11-29 09:17) [1]Создай некий флаг, который будет сигнализировать об изменениях. В функции обратного вызова: если флаг установлен, то убить теперешний таймер, создать новый, сбросить флаг.
← →
Сергей М. © (2006-11-29 09:27) [2]ПРимерно так:
var
NewTimeInterval, OldTimeInterval: UINT;
idTimer: MMRESULT;
...
function TimerCallBack(...)
begin
if NewTimeInterval <> OldTimeInterval then begin
timeKillEvent(mmResult);
OldTimeInterval := NewTimeInterval;
if NewTimeInterval <> 0 then
mmResult := TimeSetEvent(NewTimeInterval, 0, @TimerCallBack, 0, TIME_PERIODIC);
end;
...
end;
устанавливаем новый период:
NewTimeInterval := ....;
p.s.
Все обращения к статической переменной NewTimeInterval крайне желательно защитить крит.секцией.
← →
Alex_C © (2006-11-29 09:31) [3]Ок! Понятно! Спасибо!
Страницы: 1 вся ветка
Текущий архив: 2007.01.21;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.049 c