Главная страница
    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.009 c
2-1145793355
inri13666
2006-04-23 15:55
2006.05.14
System menu


15-1145374495
НоуНэйм
2006-04-18 19:34
2006.05.14
Стиль 2003


3-1142495330
FROSN
2006-03-16 10:48
2006.05.14
переход с D5 на D7 после него база долго грузится.


3-1142340418
Erik1
2006-03-14 15:46
2006.05.14
MyDAC &amp; ODAC


15-1145451368
lookin
2006-04-19 16:56
2006.05.14
С команд будут снимать очки за расистские выходки фанатов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский