Текущий архив: 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.46 MB
Время: 0.007 c