Вызов wxHTTP::GetInputStream() из другого потока вызывает wxPROTO_NETERR
Вот пример кода:
wxHTTP HTTP;
HTTP.SetHeader(_T("Content-type"), _T("application/octet-stream"));
HTTP.SetTimeout(10);
while (!HTTP.Connect(DownloadServer))
wxSleep(5);
wxApp::IsMainLoopRunning();
std::vector<wxString> FileRecordsToDownload;
{
wxInputStream* p_HttpStream = p_HttpStream = HTTP.GetInputStream(DownloadDirectory + "TestFile.txt");
...
}
этот код работает нормально, если я запускаю его в главном потоке, HttpStream ВСЕГДА возвращает допустимый поток. Но когда я перемещал этот код в другой поток, иногда он работал нормально (особенно во время отладки), а иногда он просто возвращал NULL(p_HttpStream = NULL), а HTTP.GetError() возвращал wxPROTO_NETERR.
Я добавил вызовы wxSocketBase::Initialize(); и wxSocketBase::Shutdown(); в основной теме.
Есть идеи, почему это происходит?
ИЗДАНО: НЕКОТОРЫЕ ОБНОВЛЕНИЯ С РАБОТОЙ
У меня пока нет ответа, почему это происходит, возможно, сервер не отвечает достаточно быстро, потому что я проверил с другим хостингом, и кажется, что другой работает просто отлично. Но вопрос в том, ПОЧЕМУ это происходит только тогда, когда код находится во вторичном потоке? Я нахожу обходной путь для этой проблемы:
wxInputStream* p_HttpStream = p_HttpStream = HTTP.GetInputStream(DownloadDirectory + "TestFile.txt");
while (HTTP.GetError() != wxPROTO_NOERR)
{
wxSleep(1);
p_HttpStream = HTTP.GetInputStream(DownloadDirectory + "TestFile.txt");
}
Так что вопрос не закрыт, если кто-то знает корень проблемы, пожалуйста, прокомментируйте.