Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

таймер и процедура


delphiForever ©   (2007-09-13 21:19:00) 

если взять таймер который тикает 100мс и выполняет процедуру PROC_1 которая выполняется припустим 500мс. Что произойдет если за 500 мс таймер тикнет 5 раз - 5 раз будет выполнена процедура PROC_1.
вопрос: нужно избегать подобных ситуаций или PROC_1 выполнится только раз?


Palladin   (2007-09-13 22:49:00) [1]


> While True Do
> probalyEndOfIntervalCounter:=1;
> Begin


млин.. хоть на башорг отправляй... переместить друг с другом две строчки


Palladin   (2007-09-13 22:47:00) [2]

млин... короче до фига чего забыл...

Var
probalyEndOfIntervalCounter:Integer;
While True Do
probalyEndOfIntervalCounter:=1;
Begin
Sleep(10);
Application.ProcessMessages;
Inc(probalyEndOfIntervalCounter);
If probalyEndOfIntervalCounter=TimerInterval div 10Then
 Begin
  DoMyprocedure;
  probalyEndOfIntervalCounter:=1;
 End;
If (ThisIsTheEndOfWorld) or (Application.Terminated) The nBreak;
End;

и вообще все это ерунда...


S@shka   (2007-09-13 22:45:00) [3]

По этой идеологии и VCL не надо использовать - кнопку самому мона нарисовать.


Palladin   (2007-09-13 22:44:00) [4]

с хрена ли? ))
Var
probalyEndOfIntervalCounter:Integer;
While True Do
probalyEndOfIntervalCounter:=1;
Begin
 Sleep(100);
 Inc(probalyEndOfIntervalCounter);
 If probalyEndOfIntervalCounter=TimerInterval div 1000 Then
  Begin
   DoMyprocedure;
   probalyEndOfIntervalCounter:=1;
  End;
 If (ThisIsTheEndOfWorld) or (Application.Terminated) The Break;
End;


Palladin   (2007-09-13 22:44:00) [5]


> {RASkov} ©   (13.09.07 22:42) [9]

ах.. тыть... его я и забыл... вставить после sleep(100) :)


{RASkov}   (2007-09-13 22:42:00) [6]

> [8] S@shka ©   (13.09.07 22:40)
> И висим на sleep ? ))

А Sleep тут зачем? В качестве слипа пойдет DoMyprocedure; :)
А вот Application.ProcessMessage не помешал бы....


S@shka   (2007-09-13 22:40:00) [7]


> тогда какой смысл в таймере?
> While True Do


- И что?
 While True Do
 begin
   DoMyprocedure;
   sleep (TimerInterval);
 end;

 И висим на sleep ? ))


Palladin   (2007-09-13 22:37:00) [8]

тогда какой смысл в таймере?
While True Do


{RASkov}   (2007-09-13 22:37:00) [9]

> [5] S@shka ©   (13.09.07 22:29)
> Смысл в таймере - повторно запустить на выполнение КОД

Угу... смысл велик :)
А кроме как таймера, больше никак....

Хотя в случае [3] - между тактами выполнения процедуры, которая вызывается по таймеру, имеется промежуток времени, равный интервалу таймера, тогда фик знает.... может и есть смысл....:)


S@shka   (2007-09-13 22:29:00) [10]


> {RASkov} ©   (13.09.07 22:27) [4]
> > [3] Вася Правильный   (13.09.07 22:24)
>
> А смысл тогда в этом таймере ? :)


Смысл в таймере - повторно запустить на выполнение КОД


{RASkov}   (2007-09-13 22:27:00) [11]

> [3] Вася Правильный   (13.09.07 22:24)

А смысл тогда в этом таймере ? :)


Вася Правильный   (2007-09-13 22:24:00) [12]

останавливай таймер перед вызовом и запускай снова после окончания процедуры
иначе поест все ресурсы


delphiForever   (2007-09-13 21:30:00) [13]


> Anatoly Podgoretsky ©   (13.09.07 21:28) [1]
> > delphiForever  (13.09.2007 21:19:00)  [0]
>
> А ты проверь

думал в принцыпе, но поленился думаю спрошу


Anatoly Podgoretsky   (2007-09-13 21:28:00) [14]

> delphiForever  (13.09.2007 21:19:00)  [0]

А ты проверь


Наверх

Титульная страница Поиск, карта сайта Написать письмо