Показать сообщение отдельно
  #9  
Старый 02.05.2011, 17:30
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от MrBadge
Необходимо следующее: в процедуре программа должна простаивать (просто в этой процедуре дальше по коду не проходить) рандомное кол-во времени. Делаю это с помощью sleep, но в этом случае вся программа перестает отвечать на запросы (в том числе и нужные процедуры). Есть ли какая-то хорошая альтернатива sleep? Заранее благодарен
А я бы сделал с помощью таймера. Процедура разбивается на куски (case). После выполнения очередного куска запускается таймер на случайное время, запоминается номер этапа и осуществляется выход из процедуры.
В процедуре OnTimer таймер останавливается и вызывается процедура (номер этапа глобальный или передаётся через параметр):
Код:
var
  Step: Integer = 0;

procedure TForm1.Proc1;
begin
  case Step of
    0:
    begin
      //...
      Timer1.Interval:= Random(10000);
      Timer1.Enabled:= true;
      Inc(Step);
      Exit;
    end;
  1: //...

  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:= false;
  Proc1;
end;
Ответить с цитированием