Вызов 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");
}

Так что вопрос не закрыт, если кто-то знает корень проблемы, пожалуйста, прокомментируйте.

0 ответов

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