Новые сообщения · Правила  
Страница 1 из 11
Модератор форума: Berestovskiy 
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » Таймер
Таймер
писал недавно програмку с графическим модулем, которая по идеи должна выполняться через определенное время, но она работала на столько быстро на сколько ей позволяла ето делать мощность компьютера...поетому нуждаюсь в таймере
1 | Автор: InTeam | 2008-03-01, 15:59   |  Репутация: [ + 1 ]
Если требуется только замедление, без привязки к точным промежуткам времени, напишите процедуру например с тремя вложенными циклами и параметром (число прокруток цикла), а потом в нужном месте обращайтесь к ней. И все - успех гарантирован.
2 | Автор: admin | 2008-03-01, 16:10   |  Репутация: [ + 21 ]
2 | Автор: admin | 2008-03-01, 16:10   |  Репутация: [ + 21 ]
Попробуй процедурку Delay(ms);
Эта процедура приостанавливает работу программы на ms единиц времени. Предполагалось, что ms – это будет время в миллисекундах, но на самом деле это не так. Эта процедура с одинаковыми параметрами работает разное время на разных компьютерах.
3 | Автор: admin | 2008-03-01, 18:53   |  Репутация: [ + 21 ]
Насколько я знаю, сама концепция таймера в том, что он выполняеться в параллельном потоке, а паскаль не поддерживает многопоточное программирование.
4 | Автор: gerra | 2008-03-01, 20:20   |  Репутация: [ + 7 ]
Так... просто=)

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 ]
спасибки за помощь)
6 | Автор: InTeam | 2008-03-02, 09:08   |  Репутация: [ + 1 ]
Понимаю что немного опоздал) но все же, я попробовал написать таймер который должен одинаково работать на машинах с разной производительностью =) Время вводиться в сотых секунды. То есть 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.


Насколько проще была бы жизнь если бы она была в исходниках
7 | Автор: LofD | 2008-03-13, 22:46   |  Репутация: [ + 14 ]
нужно определить перед началом программы реальную зедержку в реальных секундах. ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время, найти коефыцыэнт ну и тд. Правда чем больше дилеев тем лутше и точнее но и юзвер долго не может ждать, такшо сам решай)

Думаю, не ошибусь, если промолчу ;)
8 | Автор: Archi | 2008-03-13, 22:51   |  Репутация: [ + 3 ]


Думаю, не ошибусь, если промолчу ;)
8 | Автор: Archi | 2008-03-13, 22:51   |  Репутация: [ + 3 ]
[quote=Archi]нужно определить перед началом программы реальную зедержку в реальных секундах[/quote]
Задержку чего? Времени? О_о
[quote=Archi]ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время найти коефыцыэнт ну и тд.[/quote]
Непонял смысла, и что за коэфициент? =\


Насколько проще была бы жизнь если бы она была в исходниках
9 | Автор: LofD | 2008-03-13, 22:54   |  Репутация: [ + 14 ]
delay(100) на разных кампах длиться по разному. нужно определить скольео будет длиться в секундах например delay(500) (тоесть от 5 секунд). поделим реальные 5 секунд на время delay(500). узнаем коефыцыэнт. и тогда если нам нужно будет сделать задерчку на 6 или Х секунд мы умножаем аргумент delay на этоткоефициэнт. узнаем на сколько нужно поставить delay чтобы прошло реальных 6 или Х секунд. помоему тут все понятно)) может я не прав?

Добавлено (13.03.2008, 23:16)
---------------------------------------------
возможно я ошибся в том что на что делить и умножать. но суть я думаю ясна)


Думаю, не ошибусь, если промолчу ;)
10 | Автор: Archi | 2008-03-13, 23:16   |  Репутация: [ + 3 ]


Думаю, не ошибусь, если промолчу ;)
10 | Автор: Archi | 2008-03-13, 23:16   |  Репутация: [ + 3 ]
[quote=Archi]delay(100) на разных кампах длиться по разному[/quote]
а при чём тут вообще delay? эта процедура не используется в данном примере. используется только системное время, которое переводится в сотые секунды. и получается, что программа(таймер) работает до тех пор пока системное время(all2) в данный момент меньше, чем ((системное время при старте)+(заданное пользователем время))(all1). всё время естественно берётся в сотых секунды. и очевидно что время T -- время выполнения цикла. вот и весь таймер. а процедера Delay тут никаким боком..
11 | Автор: streamer | 2008-03-14, 13:12   |  Репутация: [ + 5 ]
Streamer, cпасибо что описал работу программы за меня =)

Насколько проще была бы жизнь если бы она была в исходниках
12 | Автор: LofD | 2008-03-14, 14:16   |  Репутация: [ + 14 ]
я считаю что если необходимо например чтобы время от времени происходили какието действия (перерисовка например) лутше использовать delay() встроенную процедуру, которая по возможности оптимизирована разработчиками borland, а вашу процедура которая постоянно обращаеться к системному времени. вобщем хоть я изначально отвечал на вопрос Inteam и предложение админа использовать delay() и не коей мерой не коментировал ваш код, по мере дискусии а точнее полемики я решил что ваша процедурка не самый лутший выход)

Думаю, не ошибусь, если промолчу ;)
13 | Автор: Archi | 2008-03-14, 15:48   |  Репутация: [ + 3 ]
Тогда напиши лучше , буду только рад )))

Насколько проще была бы жизнь если бы она была в исходниках
14 | Автор: LofD | 2008-03-14, 15:51 | Изменено: LofD - Пт, 2008-03-14, 15:52   |  Репутация: [ + 14 ]
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » Таймер
Страница 1 из 11
Поиск: