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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2009, 16:49   #1
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
Сообщение Как избавиться от зависания приложения при выполнении длительных операциях

В приложении висит процедура проверки строк.
Процесс проверки очень обьемный и приложение почти все заливается белым фоном на некое кол-во времени. Как заставить приложение на время выполнения задания не виснуть ?
Спасибо
Des вне форума Ответить с цитированием
Старый 28.04.2009, 16:57   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

или вставляй в тот кусок программы , который делает длительные операции строку Application.ProcessMessages или в поток это действие
SERG1980 вне форума Ответить с цитированием
Старый 28.04.2009, 17:16   #3
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Цитата:
SERG1980
Спасибо!
А про поток можно поподробнее буду благодарен манам =)
Des вне форума Ответить с цитированием
Старый 28.04.2009, 17:19   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Потоки - это достаточно большая тема. Почитай тут:
http://www.interface.ru/home.asp?artId=6105
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 28.04.2009 в 17:21.
Neeter вне форума Ответить с цитированием
Старый 28.04.2009, 18:05   #5
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
строку Application.ProcessMessages
А что делает эта строка?
dimonbest вне форума Ответить с цитированием
Старый 28.04.2009, 18:12   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

При выполнении ресурсоемкой задачи твоей программой Windows ждет пока накопятся задачи (например, перерисовка окна программы) в очереди, а не выполняет их сразу, Application.ProcessMessages заставляет выполнить все задачи для твоей программы которые накопились в данный момент.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 28.04.2009, 18:14   #7
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Она дает другим процессам тоже поработать немного, чтоб не только твоя программа работала, из-за этого и зависание.

А да, kotofff, ты прав, я перепутал и опоздал)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 28.04.2009 в 18:19.
Neeter вне форума Ответить с цитированием
Старый 29.04.2009, 18:52   #8
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
Вопрос Почти решено :)

А что делать с этим:
Код:
Form1.http1.Get(form_opt.edit_login_adress.Text);
Программа не реагирует ниначто пока не придет ответ
Пробовал и перед гетом и после гета ставить Application.ProcessMessages придется потоками? другого решения нет?
Des вне форума Ответить с цитированием
Старый 29.04.2009, 21:48   #9
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Нет, тут даже потоки не помогут.
Дело в том, что эта процедура во время подключения, скачивания кода и т.д. приостанавливает работу программы, уж так вот все сделано.
И ничто тут не поможет, только можете в отдельный поток выставить форму показывающую, что сейчас идет длительный процесс.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 29.04.2009, 21:58   #10
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Хотя нет, вспомнил, на вкладке Indy Misc есть компонент TIdAntiFreeze
Может быть он поможет, но не уверен.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от мерцания при передвижении Timages. jocry Помощь студентам 13 22.07.2012 09:46
как избавиться от рекламных роликов которые выскакивают при открытии нового окна и не закрываются Jasper92 Свободное общение 4 10.05.2009 23:41
При вставке 20-значного числа в ячейку происходит округление. Как избавиться? urri_k Microsoft Office Excel 9 25.07.2008 23:10
Ошибка при выполнении приложения ADJAVA Общие вопросы по Java, Java SE, Kotlin 0 24.07.2008 11:07
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13