|
Модераторы: Snowy, Poseidon, MetalFan |
|
schnaps |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Здравствуйте!
собственно возникает такая незадачка: запускаю idHHTP в отдельном потоке (по нажатию кнопки в основном), и пока рабочий поток что то выкачивает, то основная форма подвисает, я недоумеваю. вот код рабочего потока:
а вот код запуска потока
в догонку еще вопрос: в настройках IdHTTP выставляю вот так
а эта сволочь возвращает мне UTF8 |
||||||
|
|||||||
Matematik |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
||||
|
||||
schnaps |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
эм.... ну да косячок, но не думаю что жто влияет на затупу главной формы
А по поводу сервера, скажу по секрету, вчера как то колупал конкрентный сервер, он мне выдавал в win-1251, но настроек idHTTP не помню, потому как проект убил, кажется вообще дефолтные были,а эти я взял из снифера и подкрутил чтоб utf8 не раздавал, но не врубаюсь почему команда игнорируется |
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 4 Всего: 329 |
||||
|
||||
Matematik |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 24 Всего: 50 |
AcceptEncoding , как следует из названия, только указывает какие кодировки понимает клиент. Это не приказ серверу в какой кодировке посылать данные. Логично что сервер не будет для каждого клиента преобразовывать кодировку. GET / HTTP/1.1 Host: ya.ru Accept: text/html, */* Accept-Encoding: windows-1251 User-Agent: Mozilla/3.0 (compatible; Indy Library) HTTP/1.1 200 OK Server: nginx Date: Wed, 31 Mar 2010 14:40:04 GMT Content-Type: text/html; charset=utf-8 Content-Length: 4962 Last-Modified: Tue, 12 Jan 2010 15:29:04 GMT Connection: keep-alive Accept-Ranges: bytes <!DOCTYPE HTML PUBLIC Это сообщение отредактировал(а) Matematik - 31.3.2010, 17:41 |
||||
|
|||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 4 Всего: 329 |
||||
|
||||
schnaps |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 15.4.2008 Репутация: нет Всего: нет |
Ладно, кодировка пес с ней, уговорили ) но как быть что формочка основная подвисает? так и не могу понять в чем дело
|
|||
|
||||
Mikel |
|
||||
Опытный Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
Почитайте про работу с потоками. Примерно так должно выглядеть:
-------------------- ...so remember, it's better to burn out than to fade away |
||||
|
|||||
Демо |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 3 Всего: 50 |
1. См. сообщение от Mikel http://forum.vingrad.ru/index.php?showtopi...t&p=2128578
2. Всё неправильно.
Ты не понял сам, что в этом коде происходит. По строкам: 1. NewThread := TGetHTML.Create; //Создаём доп. нить - всё в порядке. 2. NewThread.FreeOnTerminate := True; //Указываем, что объект нашего класса будет уничтожен сразу после того, как выполнится поточная функция (на OnTerminate не будем обращать внимание - у тебя его нет). 3. NewThread.URL := 'пусть будет yandex.ru'; /Присваиваем адрес URL. Здесь пока в порядке 4. NewThread.Resume; //В этот момент поточная функция начинает исполняться и вызывается Execute В ней выполняется запрос. Обрати внимание на следущую строчку. 5. memo1.Lines.Add(NewThread.WebPage); //В этот момент ты вызываешь с какого-то перепугу метод потока, который вызывает Execute (что совершенно неправильно). Но это ещё полбеды. Метод Execute ты выполняешь как обычную процедуру в основном потоке. Естественно, что в этот момент форма не обновляется. Но этого мало. В этот момент Execute, который начал работать после NewThread.Resume может закончить выполнение, после чего твой поток успешно самоуничтожится, но Execute, который ты вызвал в основном потоке, ещё продолжает выполняться. У тебя не возникает AV только из-за того, что метод Execute статический. 6. finally NewThread.Free; Мало того, что поток ранее уже самоуничтожился, ты пытаешься его здесь убить ещё раз. Добавлено через 5 минут и 10 секунд Итог: без изучения принципов многопоточной разработки мало что получится. http://forum.vingrad.ru/forum/topic-60076.html http://www.almar.net.ru/dokuwiki/doku.php?id=articles:00000 Это сообщение отредактировал(а) Демо - 2.4.2010, 22:14 -------------------- |
|||
|
||||
Правила форума "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. |