Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Задержка программы 


новенький в Делфи   (2002-03-25 10:26) [0]

Можно в процедуре сделать задержку, что-то вроде Delay на паскале? (компонент Timer не подходит)



aus   (2002-03-25 10:29) [1]

Sleep



tovSuhov   (2002-03-25 10:29) [2]

Sleep(ms);



-=CrazyFish=-   (2002-03-25 10:45) [3]

А можно сделать так

procedure Pause(xPause: Integer);
var t: Integer;
begin
t:=GetTickCount;
repeat
Application.ProcessMesagess;
until GetTickCount-t>=xPause;
end;



Виктор Щербаков   (2002-03-25 10:49) [4]

Вариант -=CrazyFish=- © (25.03.02 10:45) будет впустую использовать время процессора, а Sleep просто уберет поток из списка планируемых на заданное время.



-=CrazyFish=-   (2002-03-25 10:53) [5]

Виктор Щербаков © (25.03.02 10:49)

Согласен, но только мой вариант не будет мертво подвешивать приложение на время задержки.



Anatoly Podgoretsky   (2002-03-25 21:40) [6]

Ну если учесть, что пример не работает, то да
Что бы упростить задачу ограничимся диакпазоно в 4 бита, это значения в дианазоне -8..7, пусть xPause=5 и первый GetTickCount=5, то выражение GetTickCount-t дает нам числа от -3 до 2, ну и что имеет в результате?
В результатате иы имеем бесконечный цикл, то же самое произойдет и для Integer только в этом случае имеем 32 бита. Диаразон от MinInt до MaxInt, при первом GetTickCount < 0 тот же результат.



Anatoly Podgoretsky   (2002-03-25 21:49) [7]

Да я еще не упомянул, если включена проверка Range Checking, то бкдет еще и runtime error
Кроме того результат функции GetTickCount не Integer, а LongWord



Alex_LG   (2002-03-26 02:49) [8]


> Anatoly Podgoretsky © (25.03.02 21:40)
> Ну если учесть, что пример не работает, то да
> Что бы упростить задачу ограничимся диакпазоно в 4 бита,
> это значения в дианазоне -8..7, пусть xPause=5 и первый
> GetTickCount=5, то выражение GetTickCount-t дает нам числа
> от -3 до 2, ну и что имеет в результате?
> В результатате иы имеем бесконечный цикл, то же самое произойдет
> и для Integer только в этом случае имеем 32 бита. Диаразон
> от MinInt до MaxInt, при первом GetTickCount < 0 тот же
> результат.
>
>
> Anatoly Podgoretsky © (25.03.02 21:49)
> Да я еще не упомянул, если включена проверка Range Checking,
> то бкдет еще и runtime error
> Кроме того результат функции GetTickCount не Integer, а
> LongWord


проще сказать так: замени ВСЕ Integer в примере на Cardinal (например)



Anatoly Podgoretsky   (2002-03-26 08:07) [9]

Замена на Cardinal решит част проблем, но две главные останутся, нарушение диапазона и неправильная работа при состояние счетчика близком к максимальному, такой алгоритм подходит только к тем машинам, которые ежедневно перезагружаются.



Виктор Щербаков   (2002-03-26 10:00) [10]

Если уж говорить о серверных платформах, то на NT/2к можно сделать через WaitableTimer.



Anatoly Podgoretsky   (2002-03-26 22:02) [11]

А о не серверных, а на Win9x




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.026 c
14-22843          PEC                   2002-02-25 12:47  2002.04.08  
Delphix !


7-22861           dima_yn               2002-01-16 13:58  2002.04.08  
Как узнать код возврата DOS-программы...


14-22787          JustMan               2002-02-24 16:55  2002.04.08  
Люди, нужна помощь!


1-22712           $Hic0                 2002-03-26 16:24  2002.04.08  
Непонятно отчего ошибка раз... неясно почему она не обрабатывается :(


3-22523           Гарик                 2002-03-14 10:55  2002.04.08  
Разделение сессии (DOA)