传递/修改FileOutputStream

时间:2017-08-30 14:04:30

标签: c++ wxwidgets

我正在编写一个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;
}

0 个答案:

没有答案