diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index db6a52c2e..9a265d393 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -1948,33 +1948,50 @@ void multiSlsDetector::resetFinalDataQueue() { CYCLES_NUMBER, GATE_INTEGRATED_TIME } -*/ + */ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t){ - int i; - int64_t ret1=-100, ret; + + int ret=-100; + + if(!threadpool){ + cout << "Error in creating threadpool. Exiting" << endl; + return -1; + }else{ + //return storage values + int64_t* iret[thisMultiDetector->numberOfDetectors]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int64_t(-1); + Task* task = new Task(new func2_t(&slsDetector::setTimer, + detectors[idet],index,t,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + if(iret[idet] != NULL){ + if (ret==-100) + ret=*iret[idet]; + else if (ret!=*iret[idet]) + ret=-1; + delete iret[idet]; + }else ret=-1; + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<timerValue[index]=ret; + return ret; +} - - for (i=0; inumberOfDetectors; i++) { - if (detectors[i]) { - ret=detectors[i]->setTimer(index,t); - if(detectors[i]->getErrorMask()) - setErrorMask(getErrorMask()|(1<timerValue[index]=ret1; - - return ret1; -}; int64_t multiSlsDetector::getTimeLeft(timerIndex index){ @@ -5142,20 +5159,41 @@ slsReceiverDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f) { int multiSlsDetector::setFileIndex(int i) { - int ret=-100, ret1; - for (int idet=0; idetnumberOfDetectors; idet++) { - if (detectors[idet]) { - ret1=detectors[idet]->setFileIndex(i); - if(detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask()|(1<numberOfDetectors]; + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + iret[idet]= new int(-1); + Task* task = new Task(new func1_t(&slsDetector::setFileIndex, + detectors[idet],i,iret[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + for(int idet=0; idetnumberOfDetectors; idet++){ + if(detectors[idet]){ + if(iret[idet] != NULL){ + if (ret==-100) + ret=*iret[idet]; + else if (ret!=*iret[idet]) + ret=-1; + delete iret[idet]; + }else ret=-1; + if(detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask()|(1<* m7; func2_t * m8; func2_t * m9; - func2_t * m10; - func3_t * m11; - func4_t * m12; - func4_t * m13; - func4_t * m14; + func2_t * m10; + func2_t * m11; + func3_t * m12; + func4_t * m13; + func4_t * m14; + func4_t * m15; }; class Task: public virtual SuperTask { @@ -144,11 +146,12 @@ public: Task(func2_t * t): SuperTask(),fnum(7){m7 = t;}; Task(func2_t * t): SuperTask(),fnum(8){m8 = t;}; Task(func2_t * t): SuperTask(),fnum(9){m9 = t;}; - Task(func2_t * t): SuperTask(),fnum(10){m10 = t;}; - Task(func3_t * t): SuperTask(),fnum(11){m11 = t;}; - Task(func4_t * t): SuperTask(),fnum(12){m12 = t;}; - Task(func4_t * t): SuperTask(),fnum(13){m13 = t;}; - Task(func4_t * t): SuperTask(),fnum(14){m14 = t;}; + Task(func2_t * t): SuperTask(),fnum(10){m10 = t;}; + Task(func2_t * t): SuperTask(),fnum(11){m11 = t;}; + Task(func3_t * t): SuperTask(),fnum(12){m12 = t;}; + Task(func4_t * t): SuperTask(),fnum(13){m13 = t;}; + Task(func4_t * t): SuperTask(),fnum(14){m14 = t;}; + Task(func4_t * t): SuperTask(),fnum(15){m15 = t;}; ~Task(){} @@ -168,6 +171,7 @@ public: case 12: (*m12)(); break; case 13: (*m13)(); break; case 14: (*m14)(); break; + case 15: (*m15)(); break; default: cprintf(RED, "Error: Task not defined. Abort!\n"); break;