Таймер
|
|
писал недавно програмку с графическим модулем, которая по идеи должна выполняться через определенное время, но она работала на столько быстро на сколько ей позволяла ето делать мощность компьютера...поетому нуждаюсь в таймере
|
|
|
Если требуется только замедление, без привязки к точным промежуткам времени, напишите процедуру например с тремя вложенными циклами и параметром (число прокруток цикла), а потом в нужном месте обращайтесь к ней. И все - успех гарантирован.
|
|
|
Попробуй процедурку Delay(ms); Эта процедура приостанавливает работу программы на ms единиц времени. Предполагалось, что ms – это будет время в миллисекундах, но на самом деле это не так. Эта процедура с одинаковыми параметрами работает разное время на разных компьютерах.
|
|
|
Насколько я знаю, сама концепция таймера в том, что он выполняеться в параллельном потоке, а паскаль не поддерживает многопоточное программирование.
|
|
|
Так... просто=) program timeroK_OneMinute; {onpegeJIeHue BPEMEHu Delay(ms)} {by АДШТ2008}{ver 1.0} uses crt; var usertime:longint;i:byte; begin clrscr; writeln('ms=?'); readln(usertime); writeln; for i:=1 to 60 do begin delay(usertime); write('*'); end; write(' - one minute?!'); readln; end.
я все понимаю...
№ 5 | Автор: flin |
2008-03-01, 21:51 | Изменено: flin - Сб, 2008-03-01, 21:51
|
Репутация: [ + 8 ]
|
|
|
|
Понимаю что немного опоздал) но все же, я попробовал написать таймер который должен одинаково работать на машинах с разной производительностью =) Время вводиться в сотых секунды. То есть 100 = 1 секунда. program timer; uses dos,crt; var T:word; Procedure Time (T:integer); Var h,m,s,ss:word; all1,all2:longint; Begin GetTime(h,m,s,ss); all2:=0; all1:=ss+(100*s)+(6000*m)+(360000*h)+T; while(all2<all1) do Begin GetTime(h,m,s,ss); all2:=ss+(100*s)+(6000*m)+(360000*h); End; End; Begin clrscr; writeln('Enter T'); readln(T); Time(T); writeln('Thets all =)'); readkey; End.
Насколько проще была бы жизнь если бы она была в исходниках
|
|
|
нужно определить перед началом программы реальную зедержку в реальных секундах. ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время, найти коефыцыэнт ну и тд. Правда чем больше дилеев тем лутше и точнее но и юзвер долго не может ждать, такшо сам решай)
Думаю, не ошибусь, если промолчу ;)
|
|
Думаю, не ошибусь, если промолчу ;)
|
|
|
[quote=Archi]нужно определить перед началом программы реальную зедержку в реальных секундах[/quote] Задержку чего? Времени? О_о [quote=Archi]ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время найти коефыцыэнт ну и тд.[/quote] Непонял смысла, и что за коэфициент? =\
Насколько проще была бы жизнь если бы она была в исходниках
|
|
|
delay(100) на разных кампах длиться по разному. нужно определить скольео будет длиться в секундах например delay(500) (тоесть от 5 секунд). поделим реальные 5 секунд на время delay(500). узнаем коефыцыэнт. и тогда если нам нужно будет сделать задерчку на 6 или Х секунд мы умножаем аргумент delay на этоткоефициэнт. узнаем на сколько нужно поставить delay чтобы прошло реальных 6 или Х секунд. помоему тут все понятно)) может я не прав? Добавлено (13.03.2008, 23:16) --------------------------------------------- возможно я ошибся в том что на что делить и умножать. но суть я думаю ясна)
Думаю, не ошибусь, если промолчу ;)
|
|
Думаю, не ошибусь, если промолчу ;)
|
|
|
[quote=Archi]delay(100) на разных кампах длиться по разному[/quote] а при чём тут вообще delay? эта процедура не используется в данном примере. используется только системное время, которое переводится в сотые секунды. и получается, что программа(таймер) работает до тех пор пока системное время(all2) в данный момент меньше, чем ((системное время при старте)+(заданное пользователем время))(all1). всё время естественно берётся в сотых секунды. и очевидно что время T -- время выполнения цикла. вот и весь таймер. а процедера Delay тут никаким боком..
|
|
|
Streamer, cпасибо что описал работу программы за меня =)
Насколько проще была бы жизнь если бы она была в исходниках
|
|
|
я считаю что если необходимо например чтобы время от времени происходили какието действия (перерисовка например) лутше использовать delay() встроенную процедуру, которая по возможности оптимизирована разработчиками borland, а вашу процедура которая постоянно обращаеться к системному времени. вобщем хоть я изначально отвечал на вопрос Inteam и предложение админа использовать delay() и не коей мерой не коментировал ваш код, по мере дискусии а точнее полемики я решил что ваша процедурка не самый лутший выход)
Думаю, не ошибусь, если промолчу ;)
|
|
|
Тогда напиши лучше , буду только рад )))
Насколько проще была бы жизнь если бы она была в исходниках
№ 14 | Автор: LofD |
2008-03-14, 15:51 | Изменено: LofD - Пт, 2008-03-14, 15:52
|
Репутация: [ + 14 ]
|
|
|