![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задержка программы
новенький в Делфи © (2002-03-25 10:26:00)Можно в процедуре сделать задержку, что-то вроде Delay на паскале? (компонент Timer не подходит)
Anatoly Podgoretsky (2002-03-26 22:02:00) [1]А о не серверных, а на Win9x
Виктор Щербаков (2002-03-26 10:00:00) [2]Если уж говорить о серверных платформах, то на NT/2к можно сделать через WaitableTimer.
Anatoly Podgoretsky (2002-03-26 08:07:00) [3]Замена на Cardinal решит част проблем, но две главные останутся, нарушение диапазона и неправильная работа при состояние счетчика близком к максимальному, такой алгоритм подходит только к тем машинам, которые ежедневно перезагружаются.
Alex_LG (2002-03-26 02:49:00) [4]
> 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-25 21:49:00) [5]Да я еще не упомянул, если включена проверка Range Checking, то бкдет еще и runtime error
Кроме того результат функции GetTickCount не Integer, а LongWord
Anatoly Podgoretsky (2002-03-25 21:40:00) [6]Ну если учесть, что пример не работает, то да
Что бы упростить задачу ограничимся диакпазоно в 4 бита, это значения в дианазоне -8..7, пусть xPause=5 и первый GetTickCount=5, то выражение GetTickCount-t дает нам числа от -3 до 2, ну и что имеет в результате?
В результатате иы имеем бесконечный цикл, то же самое произойдет и для Integer только в этом случае имеем 32 бита. Диаразон от MinInt до MaxInt, при первом GetTickCount < 0 тот же результат.
-=CrazyFish=- (2002-03-25 10:53:00) [7]Виктор Щербаков © (25.03.02 10:49)
Согласен, но только мой вариант не будет мертво подвешивать приложение на время задержки.
Виктор Щербаков (2002-03-25 10:49:00) [8]Вариант -=CrazyFish=- © (25.03.02 10:45) будет впустую использовать время процессора, а Sleep просто уберет поток из списка планируемых на заданное время.
-=CrazyFish=- (2002-03-25 10:45:00) [9]А можно сделать так
procedure Pause(xPause: Integer);
var t: Integer;
begin
t:=GetTickCount;
repeat
Application.ProcessMesagess;
until GetTickCount-t>=xPause;
end;
aus (2002-03-25 10:29:00) [10]Sleep
tovSuhov (2002-03-25 10:29:00) [11]Sleep(ms);