Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2011, 16:53   #1
Chaosito
Новичок
Джуниор
 
Регистрация: 25.11.2010
Сообщений: 2
По умолчанию Реализация ожидания без подвисания программы. (Delphi 7)

Привет всем.
насчет ожидания выполнения программы. битый час мучался дабы она не подвисала во время цикла с GetTickCount, вроде решил - добавил в цикл application.handlemessage; Одна проблема решилась, появилась другая. выйти из программы невозможно во время работы цикла. Как организовать выход? что то слышал про WM_QUIT; но никак ненагуглю как его прикрутить.

Краткий код:
Код:
t:=GetTickCount;
label1.Caption:=inttostr(t);
label2.Caption:=timetostr(time);
while gettickcount-t<10000 do
begin
  application.HandleMessage;
end;
label3.Caption:=inttostr(GetTickCount);
label4.Caption:=timetostr(time);
собсна хэлп. облазил уже кучу порталов. все "не то". неподходит для моего случая. А вообще желательно бы заварганить процедуру наподобие Sleep. только с продолжением работы и корректным завершением программы. Но мне что то подсказывает что так неполучится, т.к. небудет ожидания завершения процедуры. процедура будет выполнятся сама по себе, в то время как выполнение кода в основой программе продолжится дальше.
Chaosito вне форума Ответить с цитированием
Старый 06.02.2011, 19:37   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Задача вобще какая? Программа и так ничего не делает, если её не трогать. Смысл крутить пустой цикл, и вызывать в нем обработчик сообщений? Такой цикл и так уже есть внутри Application, зачем ещё свой городить?


> процедура будет выполнятся сама по себе, в то время как выполнение кода в основой программе продолжится дальше

ничего там не будет "само по себе", пока явно не создан новый поток (thread).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.02.2011, 05:52   #3
Chaosito
Новичок
Джуниор
 
Регистрация: 25.11.2010
Сообщений: 2
По умолчанию

Ну к примеру. как мне выполнить такое действие:

HTTP1.Post(...);
Label1.caption:='Please, wait...';
Wait(250) // Ждем 250 Минут
HTTP1.Post(...);
Label1.caption:='ok! Ready!';
Chaosito вне форума Ответить с цитированием
Старый 07.02.2011, 07:42   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

1) Через таймер:

Timer1.Interval := 250 * 60 * 1000;
Timer1.Enabled := True;

На обработчик OnTimer у таймера вешаем то, что должно произойти через 250 минут.

2) Через Application.OnIdle().

Внутри обработчика смотрим, сколько время прошло, если прошло 250 минут, вызываем что надо:

Код:
procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if (250 = minutespassed()) then MyProc();
end;
3) да вобщем дофига способов )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объекты ожидания в Delphi. Мьютекс, Семафор и Критические секции. OlgaZN Помощь студентам 2 11.06.2010 12:01
DepositFiles и Letitbit - теперь с них можно качать без ожидания goblinyara Свободное общение 10 13.01.2009 02:22
Работа программы без Delphi Gladiator Общие вопросы Delphi 1 21.05.2008 22:52