Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

Как корректно организовать "ждущую" функцию?   Найти похожие ветки 

 
TheEd   (2007-11-23 09:34) [0]

Господа мастера, вопрос в следующем (абстрагировавшись от конкретной задачи):
Есть форма на которой ряд элементов уравления, напр. кнопок;
есть некий набор действий, логически связанный, назовём его SomeActions, состоящее напр. в нажатии на кнопки в определённом порядке;
Выполнение SomeActions можно отследить, напр. по установленному флагу WasFinished или WasBreaked (флаги устанавливаются в зависимости от последовательности нажатий);

Требуется:
в модуле главной формы написать функцию
RunSomeActions : boolean;
которая "ждёт" выполнения SomeActions и возвращает его результат.
При кажущейся тривиальности, или я туплю, но что то не соображу. Решил пока так, но это криво (к примеру, диспетчер задач во время выполнения этой функции показывает 100% загрузку):

function RunSomeActions : boolean;
begin
 Result := false;
 Repeat
   Result := WasFinished;
   Application.ProcessMessages;  
 Until Result or WasBreaked;
end;


 
TheEd   (2007-11-23 09:36) [1]

забыл дописать в примере имя формы:
function SomeMainForm.RunSomeActions : boolean;
begin
Result := false;
Repeat
  Result := WasFinished;
  Application.ProcessMessages;  
Until Result or WasBreaked;
end;


 
Anatoly Podgoretsky ©   (2007-11-23 09:39) [2]

> TheEd  (23.11.2007 09:34:00)  [0]

Так ты ничего не делаешь, а только греешь процессор. Перейди на синхронные вызовы. Можно и на потоки, с обработкой OnTerminate и изменением логики. В крайнем случае вставь Sleep(1)


 
Сергей М. ©   (2007-11-23 10:09) [3]

function SomeMainForm.RunSomeActions : boolean;
var
 Msg: TMsg;
begin
 Result := False;
 while not (WasFinished or WasBreaked) do
 begin
   if GetMessage(Msg, 0, 0, 0) then
   begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
   end else Exit;
 end;
 Result := True;
end;


 
Leonid Troyanovsky ©   (2007-11-23 12:54) [4]


> TheEd   (23.11.07 09:34)  

http://www.rsdn.ru/Forum/?mid=573413
http://www.rsdn.ru/Forum/Message.aspx?mid=500558&only=1

--
Regards, LVT.


 
MetalFan ©   (2007-11-23 13:57) [5]

вместо частого вызова ProcessMessages лучше вызывать HandleMessage


 
TheEd   (2007-11-23 22:03) [6]

Спасибо, попробую


 
Ricks   (2007-11-25 19:13) [7]

Сделай в конце-концов таймер и на него повесь проверку флагов.


 
TheEd   (2007-11-26 08:38) [8]


> Сделай в конце-концов таймер и на него повесь проверку флагов.

нет, это не то!
функция должна ждать. Вариант Сергей М. подошёл.



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

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
9-1171820323
akaValerius
2007-02-18 20:38
2008.07.27
glDraw.....


2-1214223301
F@T@L_Err0r
2008-06-23 16:15
2008.07.27
Закрытие приложения


2-1214551258
lewka-serdceed
2008-06-27 11:20
2008.07.27
Проблема с получением HTML кода


2-1214563180
cvg
2008-06-27 14:39
2008.07.27
Почему при сравнении элементов массива компилятор выдает ошибку?


1-1196157020
Pakito
2007-11-27 12:50
2008.07.27
Послать комбинацию клавиш стороннему приложению