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

Вниз

Как сделать задержку выполнения программы на N милисекунд?   Найти похожие ветки 

 
HES ©   (2004-01-27 11:18) [0]

Есть функция sleep(N), но она работает криво, загружает процессор на 100%. А задача такова: я делаю игру видео-покер. Карты должны выводиться поочередно через 0.2 сек. Я пишу:

for i:=0 to 4 do
begin
Card[i].show;
sleep(200)
end;

И что я получаю? - Сначал "зависон" ровно на 5*200ms=1сек, а потом все карты появляются одновременно...
Может создать Timer с интервалом в 200ms, задать ему буфер адресов функций которые надо выполнить, и выпонять их по Timer1Timer? Но это слишком некрасиво. Может кто знает как сделать функцию например

function Pause(N_ms: integer):boolean

которая возвращает True по прошествии N ms, и во время своего выполнения не загружает процессор?


 
Darthman ©   (2004-01-27 11:31) [1]

А card - это, поди, компонент? Тогда card.repaint до ухода в спячку делай.


 
panov ©   (2004-01-27 12:03) [2]

for i:=0 to 4 do
begin
Card[i].show;
Application.ProcessMessages;
sleep(200)
end;


 
Oyster ©   (2004-01-27 12:41) [3]

Или так

for i:=0 to 4 do
begin
Card[i].show;
Form.RePaint;
sleep(200)
end;


 
Oyster ©   (2004-01-27 12:49) [4]

И, кстати, Sleep не загружает процессор на 100%, а ноаборот, освобождает его от приложения на время работы процедуры.


 
Digitman ©   (2004-01-27 14:19) [5]

var
CardId: Integer;

procedure TMyForm.MyTimerTimer(Sender: TObject);
begin
Card[CardId].Show;
inc(CardId);
with TTimer(Sender) do
begin
Enabled := CardId < 4;
if not Enabled then
begin
CardId := 0;
MyButton.Enabled := True;
end;
end;
end;

....

procedure TMyForm.MyButtonClick(Sender: TObject);
begin
...
MyTimer.Interval := 200;
MyTimer.Enabled := True;
MyButton.Enabled := False;
...
end;


 
Goorus   (2004-01-28 03:28) [6]

Я так делал ограничение fps:

var StartTime:Cardinal;
...
for i:=0 to 4 do
begin
Card[i].show;
StartTime:=GetTickCount;
while (GetTickCount-StartTime)<200 do
Application.ProcessMessages;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.027 c
3-16186
MV
2004-01-13 18:04
2004.02.06
Статистика в InterBase


8-16514
NikNik
2003-09-21 21:52
2004.02.06
DirectSound


1-16251
Maxim2030
2004-01-26 15:29
2004.02.06
как преобразовать .tlb -> .pas через командную строку


1-16307
Tosha
2004-01-25 19:15
2004.02.06
TRichEdit


3-16136
Серж
2004-01-14 10:21
2004.02.06
Вернуть данные из процедуры Oracle в dbgrid Delphi