从不同的线程调用wxHTTP :: GetInputStream()会导致wxPROTO_NETERR

时间:2016-02-20 17:40:25

标签: multithreading http inputstream wxwidgets

以下是示例代码:

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 个答案:

没有答案