Hi Patrick,
tfile->Write() should not touch your members in MyDAQ, UNLESS you write
files greater than 2GB. If this is the case, have a look at the IMPORTANT NOTE
at:
http://root.cern.ch/root/htmldoc/TTree.html#TTree:ChangeFile
Rene Brun
Patrick Marks wrote:
>
> Hello,
>
> I'm working on a Visual c++ data acquistion program and am storing my
> data to a root file. An object, which does not inherit from a root
> object manages the data taking, and contains pointers to a TTree,
> TFile, the DAQ control structures, and a 'sync' struct written to by
> another thread that controls the data taking. THe control thread
> inherits from TGMainFrame. Everything works, data is written to my
> root file. The problem is that when I call tfile->Close() or
> tfile->Write() from the DAQ object it clobbers the other members of
> the class. Below is a brief outline of my code. Any ideas why writing
> or closing the TFile interferes with my object -- the object ownership
> rules don't seem to suggest that the objects will be owned by the
> file, though i can't tell for sure. Thanks for any help!
>
> Patrick Marks
>
> class MyGUI : TGMainFrame {
>
> MyDAQ *daq;
> struct sync *control;
>
> }
>
> void MyGUI::DoDAQ() {
>
> daq = new MyDAQ();
> control->status = START;
> // Some code to start MyDAQ::Run in a new thread
>
> }
>
> clas MyDAQ {
>
> TFile *tfile;
> TTree *ttree;
> MyEvent *ev; // Inherits from TObject
> struct sync *contol;
> // Some DAQ related members...
> }
>
> void MyDAQ::Run() {
>
> Init();
>
> while(CheckControl()){ // look at *control
> GetData(); // Fills ev
> ttree->Fill();
> }
>
> tfile->Write(); // the sync & tfile member pointers are changed to
> invalid ptrs by this line.
> // same thing happens if i call tfile->Close() instead
>
> tfile->Close() // now this segfaults
> sync->status = STOPPED; // or this does (whichever comes first)
>
> }
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:08 MET