![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| Ibragim |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
День добрый. Вот такой вопрос
Если создавать объект TWebBrowser в процедуре обработки формы - все ок Так все ок
А вот если из потока - не работает, поток "зависает" на строке x := TWebBrowser.Create(nil); Где баг? Спасибо за внимание. Так не работает
|
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Ну кто ж создаёт контролы в потоке?
Зависание в таких случаях не самый страшный глюк Да и смысл здесь использовать поток? |
|||
|
||||
| Ibragim |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
Без потока никак по смыслу задачи.
У меня "ускоритель просмотра сайтов" То есть задача такая: Заранее известно, какие сайты будут просматриваться оператором. Я в куче потоков закачиваю сайты, и те что закачались показываю оператору, он нажимает "Дальше", а следующий сайт (не по очередности в списке, а тот что уже загрузился) тут как тут - осталось только показать, уже все скачано. Счас работает так: гружу с помощью TIdHttp, и когда оператор нажал "Дальше" быстенько сохраняю в файл и говорю единственному контролу TWebBrowser на форме Navigate этот файл. То что нет картинок - не страшно. Но многие сайты таким образом не грузятся - просто белое окошко WebBrowser'a, другие глюки... Причем даже просто експлорером открыая этот сохраненный файл - все равно глюки, не умеет нормально експлорер с локально сохраненным файлом работать. Опера - все ок, да где ж контрол оперовский возьмеш. Ну и тормоза на больших сайтах - просто пока WebBrowser их загрузит даже локально. Вот думаю как модернизировать. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Создавай кучу веббраузеров.
Загружай в них страницы. А, когда будет нужно, делай их видимыми. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Т.е. создать визуальный контрол в потоке и работать с его свойствами нереал?
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Он не будет работать в потоке
Все контролы завязаны на TApplication и выполняются только в основном потоке. Так устроена VCL. |
|||
|
||||
| Ibragim |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
Спасибо, вопрос понятен. Будем делать так как советует Snowy
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: нет Всего: 121 |
Но может быть можно как-нибудь из потоков отправлять сообщению контролу на форме? Просто я в своё время долго пытался сделать многопоточный клиент для RDP, тоже, как только не извращался... Может быть гуру всё-таки подскажет какой-нибудь извращённый способ? На войне, как говорится, все методы -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
||||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
TWebBrowser - сам по себе работает асинхронно
у тебя этот цикл отработает мгновенно. и управление сразу вернётся основному процессу. а вот уже по мере загрузки будут срабатывать события этого стада Ослов, типа OnNavigationComplete или как оно там, не помню. т.е. десяток браузеров - они уже сами по себе "многопоточные", и в потоки их засовывать не надо, ведь ничего не изменится. второй момент. куча TWebBrowser'ов - это может серьёзно притормозить программу. открой 100 экспловеров и посмотри, что будет с машиной. может быть, есть смысл подумать над тем, чтобы качать сайты через TIdHttp.Get, к примеру, в некий буфер (тот же TStrings), а при просмотре загружать этот буфер в один единственный TWebBrowser. з.ы. индекс забыл, сорри. Это сообщение отредактировал(а) x77 - 13.12.2006, 14:23 -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |