fBIndex(),
fTimer(NULL),
fEventId(),
- fBufferMonStarted(kFALSE)
+ fBufferMonStarted(kFALSE),
+ fThread(NULL)
{
// see header file for class documentation
fEventBuffer = new TObjArray(fBufferSize, 0);
for(Int_t id = 0; id < fBufferSize; id++ ) {
fEventId[id] = -2;
}
+
+ fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
+
}
}
+///___________________________________________________________________________
void AliEveEventBuffer::CreateBufferThread() {
- // cout << "hereherehere"<<endl;
- TThread * fThread = new TThread(AliEveEventBuffer::BufferThread, (void*) this);
- fThread->Run();
-
+ cout << "Threadexists: " << fThread->Exists() << endl;
+ if(GetBusy()) {
+ cout << "Buffer is busy, no thread created"<< endl;
+
+ } else {
+ if ( (CalculateDifference(fBIndex[kTop],fBIndex[kLast]) < fPreBuffer) ) {
+ SetBusy(kTRUE);
+ cout << "StartBufferThread()"<<endl;
+ fThread->Run();
+ cout << "Started BufferThread"<<endl;
+ } else {
+ cout << "Buffer is full already"<<endl;
+ }
+ }
}
///___________________________________________________________________________
void * AliEveEventBuffer::BufferThread(void * buffer) {
cout <<"BufferThread : " <<endl;
if(buffer) {
- if (!reinterpret_cast<AliEveEventBuffer*>(buffer)->GetBusy()) {
reinterpret_cast<AliEveEventBuffer*>(buffer)->MonitorBuffer();
- } else {
- cout << "busy"<<endl;
- }
-
} else {
cout << "no buffer"<<endl;
}
///_____________________________________________________________________________
void AliEveEventBuffer::MonitorBuffer() {
- cout << "Monitorbuffer: " << endl;
- if ( (CalculateDifference(fBIndex[kTop],fBIndex[kLast]) < fPreBuffer) ) {
- if(GetBusy()) {
- cout << "Already called FetchEvent()" << endl;
- return;
- } else {
- fBusy = kTRUE;
- FetchEvent();
- fBusy = kFALSE;
- }
- } else {
- //StopBufferMonitor();
-
- fBusy = kFALSE;
- }
+ cout << "Monitorbuffer() ";
+ SetBusy(kTRUE);
+ FetchEvent();
+ SetBusy(kFALSE);
+ cout << "done " << endl;
}
///_______________________________________________________________________________
TObject * AliEveEventBuffer::NextEvent() {
//See header file for documentation
- cout << "In enxtevent"<<endl;
-
-
- // if(fBusy) {
- // cout << "Event Buffer busy"<<endl;
- // return NULL;
- // }
- // else SetBusy(kTRUE);
+ cout << "NextEvent()"<<endl;
TObject * nextEvent = GetNextUnSeen();
- //SetBusy(kFALSE);
return nextEvent;
}
void AliEveEventBuffer::StartBufferMonitor() {
//cout << "NOT !!! starting buffer mon"<<endl;
cout << "starting buffer mon"<<endl;
- CreateBufferThread();
- SetBufferMonStarted(kTRUE);
- fTimer->Start(3000);
+ if(!GetBufferMonStarted()) {
+ CreateBufferThread();
+ SetBufferMonStarted(kTRUE);
+ fTimer->Start(3000);
+ } else {
+ cout << "Stopping buffer monitor"<<endl;
+ fTimer->Stop();
+ SetBufferMonStarted(kFALSE);
+ }
}
///___________________________________________________________________________________
void AliEveEventBuffer::StopBufferMonitor() {