スレッドからオンラインファイルを読み込もうとしましたが、問題があります。スレッド内にない場合、同じコードが正しく動作します。しかし、それがスレッドの内部にあれば、アプリケーションは終了します。wxWidgetsを使用してスレッドからオンラインファイルを読み取る方法
スレッドは、ファイルを読み取ろうとしなければ正しく動作します。
次のコードは正しく動作:
wxInputStream *httpStream; ///it is a global variable.
void contadorFrame::ConnetAndRead()
{
wxHTTP get;
get.SetHeader(_T("Content-type"), _T("text/xml; charset=utf-8"));
get.SetTimeout(10);
wxString sever, path;
getURLParts(TextCtrl_url->GetValue(), sever, path);
while (!get.Connect(sever ,80))
wxSleep(5);
httpStream = get.GetInputStream(path);
if (get.GetError() == wxPROTO_NOERR)
{
wxString xml_buff;
wxStringOutputStream out_stream(&xml_buff);
httpStream->Read(out_stream);
std::string standarize(estandarizaXML(xml_buff.ToStdString()));
readXML(standarize.c_str());///read file from buffer
}
else
{
wxMessageBox(_T("Unable to connect!"));
}
wxDELETE(httpStream);
get.Close();
}
私は、スレッド内のGUI機能を使用しないでください知っている、と私はこの方法をしようとしています。
void contadorFrame::ConnetAndRead()
{
wxHTTP get;
get.SetHeader(_T("Content-type"), _T("text/xml; charset=utf-8"));
get.SetTimeout(10);
wxString sever, path;
getURLParts(TextCtrl_url->GetValue(), sever, path);
while (!get.Connect(sever ,80))
wxSleep(5);
httpStream = get.GetInputStream(path);
if (get.GetError() == wxPROTO_NOERR)
{
PerformCalculation(); // create and run the thread
}
else
{
wxMessageBox(_T("Unable to connect!"));
}
wxDELETE(httpStream);
get.Close();
}
void contadorFrame::PerformCalculation()// create and run the thread
{
m_pThread = new MyThread(this, httpStream);
m_pThread->Create();
if (m_pThread->Run() != wxTHREAD_NO_ERROR)
{
wxLogError("Can't create the thread!");
delete m_pThread;
m_pThread = NULL;
}
}
次のコードは、
void *MyThread::Entry()
{
wxCommandEvent evt(wxEVT_MYTHREAD, GetId());
wxString xml_buff;
wxStringOutputStream out_stream(&xml_buff);
httpStream->Read(out_stream); //this fails
std::string standarize(estandarizaXML(xml_buff.ToStdString()));
readXML(standarize.c_str());///read file from buffer
wxPostEvent(m_pHandler, evt);
return (wxThread::ExitCode)0; // success
}
誰もがこの問題を解決するために助けることができ、誤って動作しますか?同じことをする別の方法は? ありがとうございます!