Многопоточные загрузки WinHttp

Я создаю приложение Delphi для загрузки файлов из Интернета, и если сервер поддерживает запрос диапазона, он будет многопоточным. Прогресс также передается обратно в графический интерфейс.

В текущей модели программного обеспечения используются компоненты TThread . Графический интерфейс вызывает TDownloadThread , который затем порождает TDownloadPartThreads - это потоки, которые фактически выполняют загрузку через WinHttp.

Моя проблема : ЦП израсходован даже для одной загрузки, когда загружается только 4 потока.

Предполагаемые причины:

  1. Я пишу в целевой файл каждые 8192 байта, и хотел знать, следует ли мне буферизовать его перед записью в один блок?
  2. Обмен данными между потоками осуществляется через Synchronize (MainForm.UpdateProgress (Downloaded, TotalSize)) , который, как я слышал, УЖАСНО делать, возможно, мне следует поделиться объектом между потоками, чтобы я мог получить к нему доступ с помощью таймера в основной форме, чтобы обновлять прогресс ?

Мои решения

  1. Поочередно записывать файлы и записывать только каждые x байтов.

  2. Обновите компоненты TThread для использования OmniThreadLibrary и каким-то образом отправьте данные обратно в основную форму.Каждый поток TDownloadPart затем стал бы IOmniWorker и отправил бы обратно свой прогресс, разделяя объект с основной формой. Затем основная форма будет использовать таймер для обновления своего прогресса, например: ProgressBar1.Position: = sharedDataObject.Progress;

Надеюсь, кто-нибудь сможет указать мне правильное направление!

5
задан Hzmy 14 November 2011 в 14:53
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: