Application.Processmessages

eclipse

Пользователь
Как сделать чтобы в процессе выполнения некоторых действий по нужному событию вышло окно (как создать новое окно я знаю) , но следующие действия дальше не выполнялись пока в новом окне не будет дан ответ?

Делаю примерно так:

procedure TForm1.Delay(ms: longint);// собственно это аналогично функции sleep;
var TheTime: LongInt;
begin
TheTime := GetTickCount + ms;
while GetTickCount<TheTime do Application.ProcessMessages;
end;
....
.....
Form3:= TForm3.Create(Application);
...
Form3.Show;
...
while Form1.lbl1.Caption = 'False' do Form1.Delay(1000); // - Именно этот момент меня и смущает.

В общем всё работает так как нужно! НО один минус... процедура Delay жрёт 50% ресурсов процессора (и то это только потому что у меня 2-х ядерный прцессор), а если использовать функцию sleep, тогда форма тупо замерзает пока не выполнить действие на форме 3. Собственно такая проблема!
 

eclipse

Пользователь
Нужно было просто выставить ModalResult в новой форме.
Можно закрывать тему.
 

sami

Местный
см. TForm.ShowModal метод
циклить по Application.ProcessMessages - это неверный путь.
 

sami

Местный
Дык я так и написал! Зачем повторяться?
Ты написал что она жрет. А я написал что это неправильно. Немного разные мысли.
Вообще его очень опасно вставлять. Если вызовешь в обработчике сообщения какой-нибудь метод, а тот зацепит ProcessMessages, то может многое сломаться после вызова.
 
Сверху