Цитата:
Сообщение от 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;