![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый день. Есть код:
Код:
и дополнительный модуль Код:
Задача была такая: загрузить страницу посредством idHTTP но с использованием класса TThread. Вроде все по теории? Вопросы: - почему не передается код страницы в HtmlCode:=ThreadLdr.Html;???? УРЛ через переменную доходит до idHTTP, а обратно нет - РАД говорит что [dcc32 Warning] Unit1.pas(44): W1000 Symbol 'Resume' is deprecated или устарело. а чем заменить? |
#2
|
||||||
|
||||||
![]() Цитата:
Во-вторых почему ты сразу пытаешься прочитать из объекта потока значение поля Html? После Resume дополнительный поток живёт своей жизнью, а главный поток своей. Почему ты думаешь, что когда в главном потоке дело дойдёт до строки "HtmlCode:=ThreadLdr.Html" то дополнительный поток уже успеет скачать страницу? В-третьих зачем ты вообще пытаешь в главном потоке прочитать у объекта потока значение поля Html? Возможно что когда в главном потоке дело дойдёт до строки "HtmlCode:=ThreadLdr.Html" то дополнительный поток уже успеет и скачать страницу и разрушить свой объект (у тебя он саморазрушаемый: FreeOnTerminate:=True) и поэтому переменная ThreadLdr будет указывать в никуда (точнее она будет указывать на то место, где раньше был объект, а теперь "руины" от него, при обращении к которым в программе может случиться "авария" типа Access Violation). Другими словами так как страницу качает дополнительный поток, то значит именно он знает когда страница закачалась, а значит именно ему решать кода уже можно "публиковать" эту страницу в Memo1 (или куда-то там ещё), а вовсе не главному потоку. Цитата:
|
#3
|
||||
|
||||
![]() в кратце:
-создай новый конструктор у наследника TThread -передавай url и Handle формы в конструктор и сохраняй значение в наследнике -FreeOnTerminate присвоить в конструкторе False -всю работу с TIdHTTP перенести в Execute -после завершения Get уведомлять форму об окончании работы, посылкой сообщения, к примеру -в обработчике считать результат и удалить объект потока Пишу программы за еду. __________________ |