Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
13-1120618997
Skyle
2005-07-06 07:03
2008.07.27
Web Service, DCOM сервер и многия клиенты


15-1213197747
Limited
2008-06-11 19:22
2008.07.27
Фича встраиваемая в Delphi IDE для форматирования комментариев


2-1214388914
Light-blr
2008-06-25 14:15
2008.07.27
Как отобразить на форме картинку в формате gif?


2-1214322012
Галинка
2008-06-24 19:40
2008.07.27
сравнить два файла?


10-1148343170
The Only
2006-05-23 04:12
2008.07.27
Не создаётся excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский