|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2006, 20:18 | #1 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,522
|
Как остановить цикл без 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; |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |