Здравствуйте, Aniskin, Вы писали:
A>Сообщить, что есть файл вызовом ProtocolSink.ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE), и при поступлении данных писать их в этот файл. При этом если Read вызывается, то и отдавать полученные данные.
A>Я делаю следующие вызовы:
A>ProtocolSink.ReportProgress(BINDSTATUS_FINDINGRESOURCE, PWideChar(Url));
A>ProtocolSink.ReportProgress(BINDSTATUS_CONNECTING, PWideChar(Url));
A>ProtocolSink.ReportProgress(BINDSTATUS_SENDINGREQUEST, PWideChar(Url));
A>ProtocolSink.ReportProgress(BINDSTATUS_MIMETYPEAVAILABLE, PWideChar(Response.MIMEType));
A>ProtocolSink.ReportProgress(BINDSTATUS_CACHEFILENAMEAVAILABLE, PWideChar(Stream.FileName));
A>ProtocolSink.ReportData(BSCF_FIRSTDATANOTIFICATION, 0, 0);
A>ProtocolSink.ReportData(BSCF_INTERMEDIATEDATANOTIFICATION, Saved, Size); // Много раз
A>ProtocolSink.ReportData(BSCF_LASTDATANOTIFICATION or BSCF_DATAFULLYAVAILABLE, Saved, Size);
A>ProtocolSink.ReportResult(S_OK, Response.Status, nil);
A>Все это происходит из отдельного потока.
В общем вот это я вынес отдельный поток
static UINT LoadSrc(LPVOID pParam)
{
THREAD* pLoad = (THREAD*)pParam;
pLoad->pSink->ReportProgress(BINDSTATUS_CONNECTING, pLoad->sUrl);
pLoad->pSink->ReportProgress(BINDSTATUS_SENDINGREQUEST, pLoad->sUrl);
pLoad->pSink->ReportProgress(BINDSTATUS_BEGINDOWNLOADDATA, pLoad->sUrl);
pLoad->BD->Send(pLoad->sUrl);
CString ct = pLoad->BD->GetRawHeader(_T("Content-Type:"));
pLoad->pSink->ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, ct);
pLoad->pSink->ReportData(BSCF_DATAFULLYAVAILABLE, 0, pLoad->BD->m_ulDataLen);
pLoad->pSink->ReportResult(S_OK,0,NULL);
return 0;
}
Как и следовало ожидать, ничего не изменилось. Все равно браузер два раза вызывает метод
Start в разных потоках. Наблюдается такая ситуация, если в
Start просто вернуть S_OK, то браузер виснет. Если вызвать ReportData или ReportResult, то
Start вызывается второй раз в другом потоке и следовательно вызываются все остальные методы и как следствие страница не найдена и ошибки.
Может у кого есть рабочий код асинхронного протокола?