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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2006, 20:18   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию Как остановить цикл без Application.ProcessMessages

перенесено со старого форума. сообщение от sanek.

Я также столкнулся с этой проблемой и мне посоветовали использовать в цикле оператор Application.ProcessMessages,
но его использование очень сильно тормозит вычислительный процесс. То есть, например, если до его использования цикл продолжался 1 минуту, то с ним (не сбрехать),минимум 10 минут. Есть ли более производительный подход?

перенесено со старого форума. сообщение от Virtson.

я делаю иногда так:
while ...
begin
if random(500)=0 then Application.ProcessMessages;
...
end;

программа строит графики функций. В зависимости от параметров построения, цикл может продолжаться и 1000 раз и 1000000...(в зависимости какой параметр введешь). Остнавливать нужно чтобы не ждать пол года(если вдруг пользователь ввел большое значение), пока он закончит вычисления.

перенесено со старого форума. сообщение от Alar.

в delphi используй процедуру Break

В паскале я делал так, да и сейчас предпочитаю этот способ.

label metka;
var
.....
цикл
if ошибка then goto metka;
конец цикла
metka:
.....


не забудь только в разделе label описать metka....

перенесено со старого форума. сообщение от sanek.

Ты меня не понял. Про break и goto я знаю. Из цикла я выхожу с помощью break. Когда комп начинает вычислять, то форма становится недоступной на момент вычисления и если вычисления становятся очень длительными то форма может быть недоступна ну час. Естественно возникает желание остановить процесс вычисления, но никакой кнопкой на форме ты его не остановишь. Один из выходов в начале цикла вставить оператор AplicationProcess.Mesages. Тогда форма на момент вычисления становится доступной и тогда можно остановить какой нибудь кнопкой.

перенесено со старого форума. сообщение от Alar.

попробуй через потоки. в Библии делфи есть описание и пример как работать с потоками. Но не уверен, что это тебе поможет...

Лучше разбей цикл на несколько поменьше...

перенесено со старого форума. сообщение от zetrix.

Ну зачем потоки какие-то и пр.
вот так можно:
var a:boolean;//глобальная переменная
...
...

//процедура запуска цикла
begin
a:=false;
for ... do
application.processmesage;//без него никак
if a then exit;
//тело цикла
end;

//процедура остановки
begin
a:=true;
end;
Alar вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
application.ProcessMessages; UROKSAN Общие вопросы Delphi 2 10.04.2008 13:32
Аналог Application.ProcessMessages() Alter Общие вопросы Delphi 10 10.02.2008 00:58
Application.ProcessMessages =LeonZone= Общие вопросы Delphi 11 27.01.2008 21:31
Application.ProcessMessages KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.08.2007 23:38
как корректно остановить цикл. Alar Общие вопросы Delphi 0 29.10.2006 10:42