我正在编写一个C ++程序,该程序应该连续写入OnIdle事件循环中的文本文件(BTW,我使用的是wxWidgets -3.0.3和Visual Studio 17)。为此,我正在创建一个TextOutputStream,如下面GetData()中的代码所述。
这里gui_magsens-> GetFilePath()只是从wxFilePickerCtrl获取文件路径,而ActivateDataLoop(true)触发OnIdle循环。现在,我想要的是对 tos 的全局引用,这样我就可以在OnIdle循环中使用它,而不必每次迭代都创建它(并关闭它)(效率不高并引导我未处理的例外)。 实现这一目标的最佳(或最干净)方法是什么?到目前为止我发现的是你可以使用一个指向流的指针(如下所示),它编译得很好但是却让我失望了“读取访问冲突”异常(显然预期指针指向已经“死”的流)。另外,是否有一个整洁的解决方法而不使用指针?
//----main.h----//
//...bunch of variables and functions
wxFileOutputStream* pFos;
wxTextOutputStream* pTos;
//---main.cpp----//
void wxMagSens::GetData()
{
//create stream
wxString f_path = gui_magsens->GetFilePath();
wxFileOutputStream fos(f_path);
wxTextOutputStream tos(fos, wxEOL_NATIVE, wxConvUTF8);
//ptrs
pFos = &fos;
pTos = &tos;
ActivateDataLoop(true);
}
void wxMagSens::OnIdleDataLoop(wxIdleEvent & evt)
{
//write to file
pTos->WriteDouble(some_double);//Here's the exception
//etc...
}
int wxMagSens::OnExit()
{
//USBInterface.USBClose();
if(pFos->IsOk()){ pFos->Close();}
return 0;
}