Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

Нужен совет по использованию таймеров   Найти похожие ветки 

 
Xerx ©   (2006-02-20 10:27) [0]

Допустим, у меня есть повторяющийся во времени процесс. Он состоит из стадий. Каждая стадия имеет свою длительность (в десятках{и сотнях} миллисекунд). Сразу по завершении текущей стадии начинается следующая. При завершении последней действие повторяется. Все управляется таймером. Он должен срабатывать на НЕКОТОРЫХ стадиях несколько раз, а на некоторых достаточно срабатываний на временных границах (т.е. в начале и в конце стадии). Каждая стадия нересурсоемка.
Так вот, как лучше это сделать? Сделать один таймер, который будет вызываться с минимально необходимым периодом и в своем обработчике выбирать действия в зависимости от стадии, или работать с набором таймеров, создавая и уничтожая их для каждой стадии? Или как-то можно изменять параметры таймера без его пересоздания (по его идентификатору)?
Кстати, длительности стадий не кратны (да и частота срабатываний тоже)! Т.е. может быть такой цикл 200(20 раз) - 35(1 раз) - 320(7 раз) - 87(2 раза). Ну, или кратно 5-10 милисекундам.
Каково ваше мнение? Как лучше сделать? И почему?!


 
RO   (2006-02-20 13:09) [1]

Приведи пример "стадии" в коде либо в псевдокоде ..


 
Xerx ©   (2006-02-20 23:57) [2]

Чисто эмпирический код. Не мой.


<обработка таймера>
case State of
 state_1:
   begin
      ElapsedTime := OldTime - GetTickCount();
      inc(TotalTime, ElapsedTime);

      if (TotalTime >= MaxTime[state_1]) then
      begin
        State := state_2;
        OldTime := GetTickCount();
        TotalTime := 0;
        exit;
      end;

      if (ElapsedTime >= State_1_interval) then
        do_something_work();
   end;

 state_2: begin ... end;
 ...
end;


Ну, вроде так.


 
RO   (2006-02-21 08:20) [3]

do_something_work() - блокирующая ф-ция ?
Где гарантия что время ее выполнения будет заведомо меньше периода срабатывания таймера ?



Страницы: 1 вся ветка

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

Наверх





Память: 0.45 MB
Время: 0.01 c
15-1145125006
lookin
2006-04-15 22:16
2006.05.14
Коррида - это бред или попытка приобщиться к природе?


5-1130225284
Новенький
2005-10-25 11:28
2006.05.14
Изменить Scroll у TStringList


9-1129985797
XCoder
2005-10-22 16:56
2006.05.14
Генерация текстур методом шума


2-1145697065
apl
2006-04-22 13:11
2006.05.14
Про TreeView


15-1145334803
balepa
2006-04-18 08:33
2006.05.14
Реклама на сайте Visual Studio 2005





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский