fBIndex(),
fTimer(NULL),
fEventId(),
- fBufferMonStarted(kFALSE)
+ fBufferMonStarted(kFALSE),
+ fThread(NULL)
{
// see header file for class documentation
fEventBuffer = new TObjArray(fBufferSize, 0);
fTimer = new TTimer();
fTimer->Connect("Timeout()", "AliEveEventBuffer", this, "CreateBufferThread()");
- fEventId = new Int_t[fBufferSize];
+ fEventId = new ULong64_t[fBufferSize];
+ 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;
}
}
}
+
+
///______________________________________________________________________________
TObject * AliEveEventBuffer::Fwd() {
PrintIndeces();
void AliEveEventBuffer::FetchEvent() {
cout << "FetchEvent " << endl;
TObject * event = GetEventFromSource();
- if(event) AddToBuffer(event);
+ ULong64_t eventId = GetEventIdFromSource();
+ if(event) {
+ AddToBuffer(event);
+ fEventId[fBIndex[kTop]] = eventId;
+ }
+
PrintIndeces();
cout << "FetchedEvent " << endl;
fEventBuffer->RemoveAt(fBIndex[kTop]);
//if (object) delete object;
fEventBuffer->AddAt(event, fBIndex[kTop]);
-}
-
+}
///_____________________________________________________________________________________
Int_t AliEveEventBuffer::CalculateNext(Int_t current) {
void AliEveEventBuffer::StartBufferMonitor() {
//cout << "NOT !!! starting buffer mon"<<endl;
cout << "starting buffer mon"<<endl;
- CreateBufferThread();
- SetBufferMonStarted(kTRUE);
- fTimer->Start(10000);
+ if(!GetBufferMonStarted()) {
+ CreateBufferThread();
+ SetBufferMonStarted(kTRUE);
+ fTimer->Start(3000);
+ } else {
+ cout << "Stopping buffer monitor"<<endl;
+ fTimer->Stop();
+ SetBufferMonStarted(kFALSE);
+ }
}
///___________________________________________________________________________________
void AliEveEventBuffer::StopBufferMonitor() {