Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > Как избавится от подвисания! |
Автор: Desperate 29.12.2006, 18:12 |
Приветствую Вас! Такая проблема, Когда качаю файл с помощью WinInet функций, происходит намертво зависание, пока файл не докачается, как от этого избавиться? И как можно прервать процесс закачки? |
Автор: ilyalyu 29.12.2006, 19:36 |
Использовать поток (TThread). > И как можно прервать процесс закачки? Поискать что-нибудь типа метода disconnect ![]() |
Автор: Matematik 29.12.2006, 20:06 |
см. InternetSetStatusCallback() |
Автор: Snowy 29.12.2006, 21:00 |
Либо использовать в асинхронном режиме, либо выносить в отдельный тред. Второе, ИМХО, лучше. |
Автор: Desperate 29.12.2006, 21:39 | ||
Это как? Сорри, не очень понимаю! |
Автор: Matematik 29.12.2006, 21:48 | ||||
http://forum.vingrad.ru/topic-60076.html |
Автор: Snowy 30.12.2006, 12:06 | ||
Я тут как-то набросал компонентик. Это пока черновик, но с http и https вроде работает. Бросаешь на форму, назначаешь события, даёшь комманду вида
Пока сыровато, но работает. Позже доработаю пул, докачку и ftp. |
Автор: Desperate 30.12.2006, 14:07 |
А для WinInet работает? А то у меня тут такое дело, ссылка на файл заканчивается так ...action=download&id=21254 если через функции Indy то не качается, ошибка, а если WinInet то свободно все качается! |
Автор: Snowy 30.12.2006, 14:29 |
На нём и написано ![]() |
Автор: Desperate 30.12.2006, 16:59 |
Да, это я внимания не обратил! ![]() |
Автор: Mephisto 24.1.2007, 11:40 |
Snowy, у тебя есть утечка в компоненте.. ![]() |
Автор: Snowy 24.1.2007, 11:56 |
Возможно. Это совсем альфа. Довести его до полноценной версии просто руки не доходят. Но я над этим работаю. |
Автор: creas0ft 6.3.2007, 19:11 |
А как бы Post к нему и прокси все же прикрутить?! |
Автор: Snowy 6.3.2007, 20:41 |
POST - без проблем: http://forum.vingrad.ru/index.php?showtopic=136476&view=findpost&p=1040527 А вот прокси я ещё не отработал. У меня нет прокси - нужно ставить. Всё руки не доходят... |
Автор: Snowy 20.11.2007, 18:54 |
Потому что надёжней и строго подчиняется логике программы. А вообще на данную тему немало копий сломано. Собственно причина та же, что и у асинхронных сокетов. В частности в книге по Indy с особой любовью расписано, почему асинхронная работа отстой. Да и во многих статьях по сокетам расписывают минусы микрософтовского асинхронного механизма. У меня нет желания ворошить то, чего в инете и так вагонами написано. |
Автор: Desperate 20.11.2007, 21:38 |
Да через Трэды нормал все! |
Автор: MetalFan 20.11.2007, 22:20 |
Snowy, эх, хотябы пару ссылок... очень интересно ![]() |
Автор: aktuba 20.11.2007, 22:37 | ||
Snowy, я же тебе на эту тему писал... Счас уже и не вспомню что именно... Насколько помню - не было освобождения строк... |
Автор: Snowy 21.11.2007, 03:03 |
Ну, код открытый. Мог бы и поправить ;-) У меня просто на всё рук не хватает. Точнее руки ![]() |
Автор: aktuba 21.11.2007, 21:06 |
Так я вроде даже писал тебе... Сейчас уже трудно вспомнить... Постараюсь на днях еще раз посмотреть что и где правил... |
Автор: MetalFan 3.12.2007, 20:06 | ||
и все таки хотелось бы аргументы... |
Автор: aktuba 3.12.2007, 21:49 |
Такой аргумент подойдет: в треде все действия происходят в одном месте, а в асинхронном запросе в разных местах, т.е. запрос происходит в одной части кода, а обработка результата в другой. Эту уже само по себе минус (во всяком случае, для меня). В дополнение - каким способом проще сделать последовательные запросы? Т.е., когда последующий запрос зависит от результатов предыдущего. Имхо, в треде проще... |
Автор: MetalFan 3.12.2007, 23:50 |
aktuba, в каких таких разных местах? )) в разных потоках всмысле? ну это да... лично для себя я считаю минусом асинх.режима в вининет то, что в итоге всеравно приходится в своем (собственноручно созданном) потоке данные читать... так что в принципе согласен, что асинхронность функциям ВинИнета пользы не особо добавляет( |