Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

Задержка без использования TTimer   Найти похожие ветки 

 
VasRog   (2004-10-05 23:06) [0]

Подскажите, пожалуйста, как можно организовать простой программы на некоторое время без использования TTimer. Помнится в паскале была функция DELAY(), которая этим занималась, но я так понимаю в дДельфи ее убрали.


 
BDenis ©   (2004-10-05 23:09) [1]

Sleep (1000) - 1 секунда сна :)


 
pipll ©   (2004-10-05 23:10) [2]

> VasRog
А чем TTimer не по нраву?


 
tormoz   (2004-10-05 23:29) [3]

var t: longint;

begin
..
t:=GetTickCount;
while GetTickCount<t+1000 do; //1000 - время в миллисекундах
..
end;


 
Ihor Osov'yak ©   (2004-10-06 01:02) [4]

2 [1] BDenis ©   (05.10.04 23:09)

> Sleep (1000) - 1 секунда сна :)

Это остонов потока. Куда еще ни шло в рабочих потоках, и то не всегда, в основном потоке гуишного приложенеия - ну очень мерзко смотрится...

2 [3] tormoz   (05.10.04 23:29)

> t:=GetTickCount;
> while GetTickCount<t+1000 do; //1000 - время в миллисекундах

и получим почти 100 процентную загрузку системы.. С одновременной
заморозкой того же гуи, если в основном потоке..  

Если все же на первом месте простота - то можно посоветовать некоторую модификацию этого способа -

var t: longint;

begin
..
t:=GetTickCount;
while GetTickCount<t+1000 do  //1000 - время в миллисекундах
begin
  if GetQueueStatus(QS_ALLEVENTS) <> 0
  then
      Application.ProcessMessages
  else
    sleep(10);
end
..
end;


недостаток этого  способа = недостаткам использования Application.ProcessMessages, в первую очередь - опасность нарваться на повторный вызов процедуры до окончания ее работы в случае бардачного кодирования..

....

если делать по человечески, то либо использовать апишные таймера -
см.  SetTimer, KillTimer.

Либо перейти к обьектам синхронизации (с изменениям архитектуры приложения).
Кстати, для всяких WaitFor... можна также указывать время таймаута..

Если WaitFor... нужно использовать в основном потоке - то можно вспомнить про факт наличия MsgWaitForMultipleObjects - снова же с целью избежания "заморозки" основного потока..  примерно так -

   
 while True do
   begin
     result := MsgWaitForMultipleObjects(1, hHandle, false, dwMilliseconds,
       QS_AllINPUT);
     case result of
       WAIT_TIMEOUT,
         WAIT_ABANDONED,
         Wait_Object_0: Break;
       Wait_Object_0 + 1:
           if Peekmessage(Msg, 0, 0, 0, PM_REMOVE) then
         begin
           TranslateMessage(Msg);
           DispatchMessage(Msg);
         end;
     end;
   end;


в принцыпе - опасность повторного вхождения здесь также сохраняется (при бардачке, естественно)...


 
Amoeba ©   (2004-10-06 11:38) [5]

Delay() из RxLib


 
VasRog   (2004-10-06 23:33) [6]

Спасибо большое всем. Хорошо прошел
var t: longint;

begin
..
t:=GetTickCount;
while GetTickCount<t+1000 do  //1000 - время в миллисекундах
begin
 if GetQueueStatus(QS_ALLEVENTS) <> 0
 then
     Application.ProcessMessages
 else
   sleep(10);
end
..
end;
вот этот вариант. Простой слип почему-то не захотел должным образом работать.


 
Mihey_temporary ©   (2004-10-06 23:37) [7]

var i, k: Integer;
   n: Integer;
...
Randomize;
for i := 1 to 100000000 do
for k := 1 to 100000000 do
 n := Random(300000);


 
Gero ©   (2004-10-06 23:41) [8]


> Mihey_temporary ©   (06.10.04 23:37)

Во, самый лучший вариант )


 
VasRog   (2004-10-07 17:18) [9]

Удалено модератором
Примечание: Вопросы по разным темам - в разных ветках.


 
Erik1 ©   (2004-10-07 17:38) [10]

Присотановить, значить ничего не вычислять? Это просто, надо выйти из всех циклов с помощю exit. Если надо заморозить GUI то поробуй смертельный номер, сделай Susped главному потоку!



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

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

Наверх





Память: 0.48 MB
Время: 0.04 c
14-1096963030
Layner
2004-10-05 11:57
2004.10.24
Kodak выиграла иск о патентах на Java


14-1096654159
ckalb
2004-10-01 22:09
2004.10.24
Звук off


4-1095439222
veteran
2004-09-17 20:40
2004.10.24
Как найти файлы избранного?


4-1095749203
Users
2004-09-21 10:46
2004.10.24
Редакторы RC (аля Resource Workshop )


3-1096365087
MakNik
2004-09-28 13:51
2004.10.24
текст SQL ошибки в приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский