Sleep, Заменитель ????

SlavaGTRGT

Чем еще подобным можно заменить sleep (), или как сделать что при обработки каманды слип чтоб приложение не зависало!!!!!!!
13 ответов

SlavaGTRGT

Используйте TTimer.


SlavaGTRGT

слип чтоб приложение не зависало
Application.ProcessMessages;
А вообще заместо Sleep() лучше использовать таймер, как и написано выше.


SlavaGTRGT

Используйте TTimer.
смысле таймер , и что тупо его поставить а не "громко" ли получится , мне надо чтоб был промежуток времени между действиями , а как таймер он же просто будет постоянно выполнять заданные действия, пока его не остановишь
А вообще заместо Sleep() лучше использовать таймер, как и написано выше.
Application.ProcessMessages; - а как этим пользоваться !!! так попробовал , все как и прежде!!!
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ProcessMessages;
ShowMessage('1');
sleep(5000);
ShowMessage('2');
end;
и так
...... 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ProcessMessages;
  Application.Run;
end.


SlavaGTRGT

SlavaGTRGT, промежуток времени задается св-ом Interval


SlavaGTRGT

Как запользуете, так и будет работать.Кладете на форму таймер и кнопку.
procedure TForm1.FormCreate(Sender: TObject);
begin
    Timer1.Enabled := false;
    Timer1.Interval := 500;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    Timer1.Enabled := false;
    Timer1.Enabled := true;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Timer1.Enabled := false;
    MessageBox(Handle, 'foo', 'bar', 0);
end;


SlavaGTRGT

Как запользуете, так и будет работать.Кладете на форму таймер и кнопку.
procedure TForm1.FormCreate(Sender: TObject);
begin
    Timer1.Enabled := false;
    Timer1.Interval := 500;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    Timer1.Enabled := false;
    Timer1.Enabled := true;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Timer1.Enabled := false;
    MessageBox(Handle, 'foo', 'bar', 0);
end;
Это слишком громозко мне надо короче.это


SlavaGTRGT

SlavaGTRGT, что слишком громоздко ? Ты прикалываешься что ли ?


SlavaGTRGT

SlavaGTRGT, что слишком громоздко ? Ты прикалываешься что ли ?
Нет , мне надо так мелко и красиво
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ProcessMessages;
ShowMessage('1');
sleep(5000);
ShowMessage('2');
end;
я тоже Хочу , но ты прав "УВЫ"))))))


SlavaGTRGT

Нет , мне надо так мелко и красиво
Мда ужж... Это наверно действительно крупно и безобразно использовать пару строк в таймере...


SlavaGTRGT

Можно написать в отдельном юните фичу (на тех же таймерах), чтобы в итоге ее использовать, как в JS setTimeout и clearTimeout. Но для этого надо немного повозиться.


SlavaGTRGT

Если не хочешь, чтобы при выполнении sleep зависал интерфейс программы, вынеси его в отдельный поток. Типа
function mes(lParam: integer):integer;
begin
ShowMessage('1');
sleep(5000);
ShowMessage('2');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
hT: cardinal;
begin
CreateThread(nil, 0, @mes, nil, 0, nil);
CloseHandle(hT);
end;
Мог напутать кое что с синтаксисом...


SlavaGTRGT

Если не хочешь, чтобы при выполнении sleep зависал интерфейс программы, вынеси его в отдельный поток. Типа
function mes(lParam: integer):integer;
begin
ShowMessage('1');
sleep(5000);
ShowMessage('2');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
hT: cardinal;
begin
CreateThread(nil, 0, @mes, nil, 0, nil);
CloseHandle(hT);
end;
Мог напутать кое что с синтаксисом...
чет CreateThread(nil, 0, @mes, nil, 0, nil); здесь ошибку парит!!!!!!!!! mes - что это string or integer or pchap??? или что-то другое!!!


SlavaGTRGT

mes - это функция, которую будет выполнять новый поток. @mes - указатель на нее