Индикация прогресса при загрузке файла HTTP с помощью WinHTTP

Я хочу реализовать индикатор выполнения в моем приложении Windows на С++ при загрузке файла с помощью WinHTTP. есть идеи как это сделать? Похоже, что WinHttpSetStatusCallback - это то, что я хочу использовать, но я не вижу, какое уведомление искать... или как получить "процент загрузки"...

Помощь!

Спасибо!


person Steve Middleton    schedule 10.09.2009    source источник
comment
Вы можете увеличить индикатор выполнения в цикле Do while (msdn.microsoft.com/en-us/library/)   -  person anno    schedule 11.09.2009
comment
Да, собственно, этим я и занялся...   -  person Steve Middleton    schedule 15.09.2009


Ответы (1)


Согласно документам:

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE

Данные доступны для извлечения с помощью WinHttpReadData. Параметр lpvStatusInformation указывает на DWORD, который содержит количество доступных байтов данных. Сам параметр dwStatusInformationLength равен 4 (размер DWORD).

а также

WINHTTP_CALLBACK_STATUS_READ_COMPLETE

Данные успешно прочитаны с сервера. Параметр lpvStatusInformation содержит указатель на буфер, указанный при вызове WinHttpReadData. Параметр dwStatusInformationLength содержит количество прочитанных байтов.

Могут быть и другие соответствующие уведомления, но эти два кажутся ключевыми. Получение «процента» не обязательно тривиально, потому что вы можете не знать, сколько данных вы получаете (не для всех загрузок задана длина содержимого...); вы можете получить заголовки с помощью:

WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE

Заголовок ответа получен и доступен с помощью WinHttpQueryHeaders. Параметр lpvStatusInformation имеет значение NULL.

и если Content-Length IS доступен, то процент можно вычислить, отслеживая общее количество байтов в каждом уведомлении «доступные данные», в противном случае ваше предположение так же хорошо, как и мое ;-).

person Alex Martelli    schedule 10.09.2009