Главная страница
    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.008 c
3-1202913301
AlexeyMir
2008-02-13 17:35
2008.07.27
Кеширование БД


2-1214061434
TForumHelp
2008-06-21 19:17
2008.07.27
POST запрос


2-1214247277
cr@nk
2008-06-23 22:54
2008.07.27
Setlength для 2мерного массива


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


2-1212824205
Genty
2008-06-07 11:36
2008.07.27
Как передать текстовые данные с одного компьютера на другой?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский