delay в делфи

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

есть ли какой нить аналог delay в делфи?
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

matroskin писал(а):есть ли какой нить аналог delay в делфи?
Есть. sleep

А еще есть функция gettickcount, которая возвращает кол-во миллисекунд начиная с запуска программы. Поэтому можно делать что-то вроде:
time1:=gettickcount;
repeat
until gettickcount>=time1+1000;

А еще было что-то связанное с потоками - WaitForSingleObject или WaitForSingleEvent, не помню точно
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

matroskin писал(а):есть ли какой нить аналог delay в делфи?
Компьютер должен работать, а не спать.
2B OR NOT(2B) = FF
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

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

Код: Выделить всё

procedure TForm1.pause;
var
  h: THandle;
begin
  h := CreateEvent(nil, true, false, ' ');
  WaitForSingleObject(h, 10000);
  CloseHandle(h);
end;
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

вот именно это я и имел в виду. С виду непонятно, зато изящно!
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

:)
пасибо всем
Avokain
Сообщения: 1
Зарегистрирован: 10 янв 2007, 21:23

Так намного удобней

procedure Delay (Seconds: Real);
var
Later: TDateTime;
begin
Later:= Now + (Seconds / (24.0 * 60.0 * 60.0));
While Now < Later do Application.ProcessMessages;
end;
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

божешь мой, а чем Sleep(ms) не угодил-то???

офф: вспомнилсо боянчег
Программистский шедевр на индусском форуме на тему "как узнать завтрашнюю дату" остался непревзойденным:

void get_tomorrow_date( struct timeval *date )
(
sleep( 86400 ); // 60 * 60 * 24
gettimeofday( date, 0 );
)

:)
Изображение
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

В GUI части проекта вообще нельзя использовать Sleep(). На сообщения нужно отвечать так быстро, как только возможно, поэтому надо истользовать WM_TIMER. В серверной части тоже неплохо бы задуматься, нельзя ли вместо Sleep() делать что - либо более полезное.
2B OR NOT(2B) = FF
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

а мне как раз попдошло sleep(1)
это для моего случая не критично :)
Ответить