![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
AndreyZ53 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: 1 Всего: 2 |
Здравсвуйте, у меня такой вопрос: у меня на форме есть меню, таймер, IdHttp и IdAntiFreeze, на таймере через IdHttp я загружаю сраничку методом GET. Таймер стоит на 5 секунды, то есть каждые 5 секунд у меня загружается страница, так вот, когда я, во время загрузки страницы, выбираю пункт меню какой-нибудь, программа и само меню зависает на время, пока не загрузиться страничка, а потом отвисает и норм опять. Можно как-то сделать чтобы она не зависала и во время загрузки сраницы через IdHttp, программа работала как обычно?
Это сообщение отредактировал(а) AndreyZ53 - 18.8.2009, 15:24 --------------------
https://itbases.ru/ |
|||
|
||||
Matematik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
> Можно как-то сделать чтобы она не зависала и во время загрузки сраницы через IdHttp
Самый надежный способ - вынести работу с HTTP в отдельный поток (thread) Примерно так:
|
|||
|
||||
AndreyZ53 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: 1 Всего: 2 |
Спасибо большое, но вот с потоками у меня проблемы, по-другому никак нельзя больше сделать? --------------------
https://itbases.ru/ |
|||
|
||||
Matematik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
Попробуй поставить IdAntiFreeze1.OnlyWhenIdle в False.
Но это по прежнему костыль, понормальному надо выносить долгие операция тем более с блокировкой в отдельный от главного поток |
|||
|
||||
AndreyZ53 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: 1 Всего: 2 |
Хорошо, начну с простого в потоках. Например я подключаюсь к БД MYSQL на хостинге и на время подключения форма зависает, а у меня там есть анимация типа Имитация подключения, но когда идет подключение она зависает и анимация не проигрывается, её даже на форме не видно, так вот как я выношу в поток, я правильно делаю (З. Ы. с потоками работай сейчас в первый раз)
И вот как мне сейчас сделать по нажатию на кнопку, чтобы высота окна расширялась на 100px и там появлялись
Ну то, что я говорил анимация появлялаль, но не зависала. Я вот чуток из примера вашего что понял сделал так, а вот не получается у меня чего-то, чтобы не зависало по нажатию на кнопку "Подключиться" Это сообщение отредактировал(а) AndreyZ53 - 18.8.2009, 17:39 --------------------
https://itbases.ru/ |
||||
|
|||||
Matematik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
Очень рекомендую почитать о потоках в Delphi http://forum.vingrad.ru/forum/topic-60076.html
По коду: - inherited; в методе Execute не нужен - Synchronize() используется для синхронизации данных с основным потоком; выполняется Synchronize в контексте основного потока, доп. поток при этом останавливается и ждет завершения выполнения метода DoConnectMySql
- Обращение к компонентам на форме (Form2.MyConnection1) из доп.потока чревато неконтролируемыми ошибками. Например, при завершении программы MyConnection1 уничтожится из главного потока (MyConnection1.Free;) и в это самое время доп. поток что-нибудь сделает с MyConnection1 - в лучшем случае последует access violation at address. Тут можно создавать (и уничтожать) объекты в контексте доп.потока или сделать так, чтобы главный поток не обращался к компонентам, когда с ними работает доп.поток. |
|||
|
||||
AndreyZ53 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 22.8.2008 Репутация: 1 Всего: 2 |
Вот как-то замолчал я, просто чуток появилось время и начал разбираться в потоках, не хотел я тревожить так часто своими глупыми вопросами, и поэтому пытался как-то вссе уладить сам. Но я вот уже даже и обрадывался, как нажал на кнопку подключить и форма расширелась и появился процесс загрузки без зависона формы. Но не тут то было теперь почему-то данные для подключения не подходят, хотя если подлкючаюсь с этими данными с зависоном формы, то все норм. Может поможет мне кто
Вот мои 2 процедуры, которые я использую для подключения
Вот unit моего потока
А вот, что я пишу на кнопку
Так вот зависно уже нету, форма нормально расширяется и показывается анимация, все норм, но сейчас уже не подключается. Но если я возвращаю в прежнюю ситуацию с зависоном, то подключается все норм с теми же данными, что и в потоке для подключения. Может я не правильно оформил как-то процедуры или что, может кто и подскажет. Спасибо --------------------
https://itbases.ru/ |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 14 Всего: 128 |
AndreyZ53, прочитай внимательно пост Matematikа, и затем предложенную им статью... бред пока что у тебя написан
-------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |