Текущий архив: 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