Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [BC9] IdHTTP vs NMHHTP - Get(), Подвисание программы во время получения 
:(
    Опции темы
MuForum
Дата 23.12.2008, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



Доброе время суток!
- Работаю на 'C++ Builder 2009'; (Version 12.0.3170.16989)

# Задача: Скачать файл с интернета имея прямую ссылку на файл, также отображать в компоненте 'TCGauge' статистику скачивания.
- Проблема возникает в том, что скачивания происходит в контексте основного потока программы, таким образом во время скачивания файла основная программа подгружается.
- На 'C++ Builder 6' для таких целей использовал компонент 'TNMHTTP', но к сожалению на 9 его убрали(вообще все компоненты этой линейки).
- TNMHTTP скачивал файлы не в контексте основного потока, тем самым не подгружая основной поток программы. (То есть, как раз удовлетворял потребности)

Код

bool __fastcall TFFUpdate::DownloadFile(UnicodeString URLPath, UnicodeString FilePath)
{
    ...
    try
    {
        TFileStream *file_str = new TFileStream(FilePath, fmCreate);
        IdHTTP1->Get(URLPath, file_str);
        file_str->Free();
    }
    catch(Exception &e)
    {
        UnicodeString msg = e.ClassName();
        msg += ": " + e.Message;
        WLog(1, msg);
    }
    ...
}
//---------------------------------------------------------------------------

void __fastcall TFMain::IdHTTP1Work(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCount)
{
    CGauge1->Progress = AWorkCount;
}
//---------------------------------------------------------------------------

void __fastcall TFMain::IdHTTP1WorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
    CGauge1->MaxValue = AWorkCountMax;
}
//---------------------------------------------------------------------------

- Файл скачивается успешно, с этим проблем нету.


# Вопрос: Как решить проблему с подгружением основного потока во время скачивания файла с хостинга?
- В свойствах компонента не нашел свойства, которое хоть как бы говорило мне об этом.

Это сообщение отредактировал(а) MuForum - 23.12.2008, 01:46


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mrbrooks
Дата 23.12.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(MuForum @  23.12.2008,  01:34 Найти цитируемый пост)
 Как решить проблему с подгружением основного потока во время скачивания файла с хостинга?

не совсем понял о чем ты. гуй зависает чтоли? если так - кинь на форму TIdAntiFreeze.
PM MAIL   Вверх
MuForum
Дата 23.12.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



# 2, mrbooks - Благодарю за подсказку.


# TIdAntiFreeze:
Цитата

Вследствие блочной организации алгоритмов компонентов Indy зачастую создается впечатление, что приложение «зависло», в то время как соединение работает. Чтобы исключить использование вторичных процессов (threads) при организации коммуникаций для предотвращения замораживания (freeze) приложения, достаточно поместить на форму указанный компонент.

Компонент работает, анализируя запросы из стека протокола TCP/IP и посылая сообщения приложению во время задержки при возникновении блокировки внешних соединений, что создает иллюзию работающего кода. Поскольку воздействие компонента осуществляется на блокированные соединения только для главного процесса, использование TIdAntiFreeze во вторичных процессах приложения не требуется. Необходимо помнить, что компонент TIdAntiFreeze замедляет работу соединений, поскольку работа главного процесса периодически прерывается для обработки сообщений. Отсюда следует, что надо заботиться о том, чтобы разрабатываемое приложение не тратило слишком много времени на обработку сообщений, включая OnClick, OnPaint, OnResize и др. В какой-то степени этим можно управлять через свойства класса TIdAntiFreeze. Использование данного компонента не является обязательным, но позволяет решить проблему синхронизации соединений с визуальным интерфейсом приложения.


Это сообщение отредактировал(а) MuForum - 23.12.2008, 18:41


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.3436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.