![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| fack00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Здравствуйте.
Пишу загрузчик файлов, имеется код:
так вот первая строчка, если файл большой, выполняется очень долго и программа зависает на время его выполнения. Эту проблему я решил кинув компонент IdAntiFreeze из Indy Misc. Для асинхронности мне посоветовали использовать ISC, но я не смог с помощью данного компонента отправить файл (только текст). Итак, прошу помощи в следующем: 1) что лучше использовать Indy или ICS (подкиньте код, который будет отправлять файл)? Самому ICS нравится больше.. 2) как сделать прогресс бар, который будет отображать сколько уже % загружено? |
|||
|
||||
| Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: нет Всего: 8 |
Максимального контроля над процессом можно добиться, если запустить TThread, открыть сокет и писать-читать в нем.
то есть чтото вроде
а всякие индийские компоненты - от лукавого -------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 7 Всего: 50 |
Вот пример загрузки картинки на ipicture в потоке
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Как раз вот этот код в контексте доп.потока - от лукавого. как и НЕЛЬЗЯ использовать доступ к VCL компонентам из доп.потока. Нарвешься на такие грабли, которые будут выскакивать незнамо где и незнамо когда. Без видимых причин. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
Вот ещё вариант:
-------------------- |
|||
|
||||
| fack00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
код огромен и делфи его не компилит. я в нем не разобрался. его суть в том что он отправляет файл? дык это я тоже могу, только не знаю как сделать прогресс бар, показывающую сколько % файла уже отправлено.. там вроде только Get... вы меня видимо неправильно поняли, мне вот что надо: 1) как сделать прогресс бар, если я отправляю файл с помощью компонента INDY (IdHTTP)? 2) как отправить файл с помощью компонента ICS? Как сделать прогресс бар я примерно знаю, но попробовать не могу - файл то не могу отправить. мне желательно 2 вариант. |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 7 Всего: 50 |
fack00, код как раз и отображает прогресс отправки файла в мемо в процентах, прогресбар прикрутить несложно.
Заставить работать легко: кидаешь на форму кнопку и мемо, делаешь копи-паст всего кода и прописываешь обработчик OnClick у кнопки. |
|||
|
||||
| fack00 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
так и делал, но вылазит ошибка: http://s61.radikal.ru/i171/0905/78/286597376ef0.jpg первые 2 можно исправить, дабавив в VAR
а что делать с еще 2-мя не знаю, можно просто удалить - тогда нужных процентов в Memo не будет. подскажите как исправить. |
||||
|
|||||
| Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: нет Всего: 8 |
Дык синхронизировать, а не тупо подставлять значение. -------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
-------------------- |
|||
|
||||
| fack00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
Демо,
я думал он тока для get написан ответьте кто-нибудь на http://forum.vingrad.ru/index.php?showtopi...t&p=1865476 и на
Это сообщение отредактировал(а) fack00 - 11.5.2009, 19:21 |
|||
|
||||
| Matematik |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 7 Всего: 50 |
SendBufferSize/RecvBufferSize - Это параметры TIdHTTP, устанавливают размеры буферов чтения и записи в сокет. Размер буфера влияет (по-умолчанию 32кб) на кол-во считываний данных из сокета, соответственно плавность прогресса отправки\чтения данных. Событие TIdHTTP.OnWork вызывается как раз при считывании\записи в сокет данных размером SendBufferSize/RecvBufferSize. Судя по ошибкам, это Indy10 (в 8\9 эти параметры есть), в 10 SendBufferSize/RecvBufferSize убраны в IOHandle и OnWork+OnWorkBegin немного поменялись
Думаю достаточно будет убрать const http://forum.vingrad.ru/index.php?showtopi...t&p=1865159
По поводу SendBufferSize/RecvBufferSize я не уверен сработает ли, проверить негде
|
||||||||
|
|||||||||
| fack00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
1) Да у меня 10 версия INDY.
2) поправил на то что дали - другие ошибки: http://s57.radikal.ru/i158/0905/df/e85612be5cbc.jpg То есть несоответствие типов Int64 и Integer. если в коде поменять все на Int64, то в принципе копилируется и запускается, файл отправляется и показываются проценты, НО: http://s44.radikal.ru/i105/0905/28/360e7a77cdf3.jpg может откатиться на Indy 9 ? |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 7 Всего: 50 |
fack00,
division by zero происходит точно тут
При получении ответа от сервера, он (сервер) не сообщает размер пересылаемых данных, FWorkMax = 0 соответственно деление на ноль |
|||
|
||||
| fack00 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 10.5.2009 Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |