Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

задержка выполнения действий в цикле   Найти похожие ветки 

 
Salik ©   (2004-06-04 10:46) [0]

Добрый день!
Помогите организовать задержку выполнения действий в цикле

for i:=0 to 9 do
       begin
            ???
         arr[i].Data:=Now;
         
       end;

Нужно, массиву присваивать значение даты с интервалом в 5 сек.
Пробывал Timer1.Interval:=5000; Куда только не подставлял, всеравно при выводе данных отображает одну и туже дату, Пробывал Sleep(), Delay, нет результата!


 
Vlad ©   (2004-06-04 10:49) [1]


> Salik ©   (04.06.04 10:46)  


> Куда только не подставлял, всеравно при выводе данных отображает
> одну и туже дату

А ты хотел чтоб каждые 5 секунд разную дату показывал ?


 
FragMan   (2004-06-04 10:52) [2]

A не пробовал ???
Sleep(5000);

Говорят, что помогает!


 
Anatoly Podgoretsky ©   (2004-06-04 10:52) [3]

Ты не правльно используешь Sleep, функция системная, ей большое количество лет. Был бы большой шум если бы она не работала.


 
FragMan   (2004-06-04 10:54) [4]

синхронно как получилось :)

> Salik ©   (04.06.04 10:46)

говорят тебе Sleep используй!


 
Романов Р.В. ©   (2004-06-04 11:07) [5]

for i:=0 to 9 do
      begin
        // без задержки
        arr[i].Data:=Now + i/24/60/60*5;    
      end;


 
Salik ©   (2004-06-07 11:32) [6]

>Романов Р.В. ©   (04.06.04 11:07) [5]
 Работает, но без задержки нельзя т.к. идет DDE обмен и нужно считывать данные с интервалом 5мин., их накапливаю в массиве и через N-время заношу все накопленные данные в БД.  Функция Sleep(5000)работает четко, но тоже не подходит т.к. нельзя останавливать выполнение программы. Люди добрые помогите кто чем может!


 
ancara   (2004-06-07 11:37) [7]

Насколько мне известно, если Sleep выполняется в основной нити (thread) процесса, то приложение приостанавливает обработку сообщиний. Я бы все таки таймер (TTimer) поставил и счетчик (cnt: integer) или что-то в этом роде...


 
Тимохов ©   (2004-06-07 11:45) [8]


> то приложение приостанавливает обработку сообщиний

приложение не обрабатывает сообщения.
сообщения обрабатывает нить.
поэтому нить перестает обрабатывать сообщения. и если уж именно эта нить ответственна за обработку сообщений (что не обязательно), то все приложение "зависает"


 
ancara   (2004-06-07 11:52) [9]

to Тимохов:
Ну да, это я некорректно выразился...
Еще хочу предложить такой вариант:
в глобальных пер-ных:

var
 running: boolean = false;

...

procedure TForm1.Button1Click(Sender: TObject);
var
 StartTime: DWORD;
begin
 running:=not running;
 StartTime:=GetTickCount; //number of milliseconds
                          //that have elapsed since
                          //Windows was started
 repeat
   if (GetTickCount-StartTime)>5000 {5 sec} then
     begin
       StartTime:=GetTickCount;
       Do_What_You_Need;
     end;
   Application.ProcessMessages;
 until not running;
end;


  Получается "аналог" таймера, каждые 5 сек. вызывается функция Do_What_You_Need


 
Тимохов ©   (2004-06-07 11:54) [10]


> Получается "аналог" таймера, каждые 5 сек. вызывается функция
> Do_What_You_Need

а если пользователь нажмет на крестик формы 1 (т.е. попытается закрыть form1), то будет ж. Нежно еще блокировать закрытие формы, пока критится этот цикл.


 
ancara   (2004-06-07 11:58) [11]


> Нежно еще блокировать закрытие формы
Ну это уж заботы автора вопроса, ему там виднее... Задержка между вызовами главное есть, а остальное...


 
Тимохов ©   (2004-06-07 12:00) [12]


> ancara   (07.06.04 11:58) [11]

на самом деле, это я автору вопроса дал комментарий, т.е. это не был поиск ошибки в вашем ответе :))))


 
Тимохов ©   (2004-06-07 12:03) [13]

Автору.
Если решитесь делать через gettickcount, т.е. как в ancara   (07.06.04 11:52) [9], то обратите внимание на следующую особенность (из моего опыта) в случае если Do_What_You_Need работает быстро, то можно оставит все как в примере, если же Do_What_You_Need может работать долго, то лучше имхо поменять местами две строчки      
Do_What_You_Need;
StartTime:=GetTickCount;

иначе может получится такое, что цикл все время будет выполнять Do_What_You_Need.


 
evvcom ©   (2004-06-07 12:11) [14]


> ancara   (07.06.04 11:52) [9]

100%-ная загрузка процессора обеспечена, при этом не выполняется ничего полезного!
Используй лучше таймер.



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

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1086233401
Паниковский
2004-06-03 07:30
2004.06.20
Лавкрафт и его творчество.


6-1083091682
Kme
2004-04-27 22:48
2004.06.20
Как узнать размер файла перед скачиванием


14-1086019222
praktika
2004-05-31 20:00
2004.06.20
! ПОМОГИ СТУДЕНТУ ПРОЙТИ ПРАКТИКУ !


1-1086447044
a3a3ello
2004-06-05 18:50
2004.06.20
Application.Terminate


4-1084300625
ipavels
2004-05-11 22:37
2004.06.20
Обновить конфигурацию оборудования