From 4b72d685f357e04e352fa5676ec1c58d63c8666e Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Fri, 25 May 2018 15:39:28 +0200 Subject: [PATCH] migrating more multiSlsDetector calls to the generic function --- .../multiSlsDetector/multiSlsDetector.cpp | 180 ++++-------------- .../multiSlsDetector/multiSlsDetector.h | 2 +- 2 files changed, 39 insertions(+), 143 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index f182cf267..8484e2981 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -3472,7 +3472,6 @@ int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(in threadpool->wait_for_tasks_to_complete(); for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { - cout << return_values[idet] << "\n"; if (detectors[idet]) { if (ret == -100) ret = return_values[idet]; @@ -3487,6 +3486,39 @@ int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)(in return ret; } +int multiSlsDetector::parallelCallDetectorMember(int (slsDetector::*somefunc)()) +{ + int ret = -100; + + if (!threadpool) { + cout << "Error in creating threadpool. Exiting" << endl; + return -1; + } else { + std::vector return_values(thisMultiDetector->numberOfDetectors, -1); + for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { + if (detectors[idet]) { + Task* task = new Task(new func0_t(somefunc, + detectors[idet], &return_values[idet])); + threadpool->add_task(task); + } + } + threadpool->startExecuting(); + threadpool->wait_for_tasks_to_complete(); + + for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { + if (detectors[idet]) { + if (ret == -100) + ret = return_values[idet]; + else if (ret != return_values[idet]) + ret = -1; + if (detectors[idet]->getErrorMask()) + setErrorMask(getErrorMask() | (1 << idet)); + } + } + } + + return ret; +} /** returns the detector trimbit/settings directory */ string multiSlsDetector::getSettingsDir() @@ -5194,39 +5226,7 @@ string multiSlsDetector::setFileName(string s) int multiSlsDetector::setReceiverFramesPerFile(int f) { - int ret = -100; - if (!threadpool) { - cout << "Error in creating threadpool. Exiting" << endl; - return -1; - } else { - //return storage values - int* iret[thisMultiDetector->numberOfDetectors]; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { - if (detectors[idet]) { - iret[idet] = new int(-1); - Task* task = new Task(new func1_t(&slsDetector::setReceiverFramesPerFile, - detectors[idet], f, iret[idet])); - threadpool->add_task(task); - } - } - threadpool->startExecuting(); - threadpool->wait_for_tasks_to_complete(); - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++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 << idet)); - } - } - } - return ret; + return parallelCallDetectorMember(&slsDetector::setReceiverFramesPerFile, f); } slsReceiverDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f) @@ -5249,42 +5249,7 @@ slsReceiverDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f) int multiSlsDetector::setFileIndex(int i) { - - int ret = -100; - - if (!threadpool) { - cout << "Error in creating threadpool. Exiting" << endl; - return -1; - } else { - //return storage values - int* iret[thisMultiDetector->numberOfDetectors]; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++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; idet < thisMultiDetector->numberOfDetectors; ++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 << idet)); - } - } - } - - return ret; + return parallelCallDetectorMember(&slsDetector::setFileIndex, i); } int multiSlsDetector::startReceiver() @@ -5556,41 +5521,7 @@ int multiSlsDetector::getReceiverCurrentFrameIndex() int multiSlsDetector::resetFramesCaught() { - - int ret = OK; - int posmax = thisMultiDetector->numberOfDetectors; - - if (!threadpool) { - cout << "Error in creating threadpool. Exiting" << endl; - return FAIL; - } else { - int* iret[posmax]; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { - if (detectors[idet]) { - iret[idet] = new int(OK); - Task* task = new Task(new func0_t(&slsDetector::resetFramesCaught, - detectors[idet], iret[idet])); - threadpool->add_task(task); - } - } - threadpool->startExecuting(); - threadpool->wait_for_tasks_to_complete(); - - for (int idet = 0; idet < posmax; ++idet) { - if (detectors[idet]) { - if (iret[idet] != NULL) { - if (*iret[idet] != OK) - ret = FAIL; - delete iret[idet]; - } else - ret = FAIL; - if (detectors[idet]->getErrorMask()) - setErrorMask(getErrorMask() | (1 << idet)); - } - } - } - - return ret; + return parallelCallDetectorMember(&slsDetector::resetFramesCaught); } int multiSlsDetector::createReceivingDataSockets(const bool destroy) @@ -6113,41 +6044,8 @@ int multiSlsDetector::enableDataStreamingToClient(int enable) int multiSlsDetector::enableDataStreamingFromReceiver(int enable) { if (enable >= 0) { - int ret = -100; - if (!threadpool) { - cout << "Error in creating threadpool. Exiting" << endl; - return -1; - } else { - //return storage values - int* iret[thisMultiDetector->numberOfDetectors]; - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++idet) { - if (detectors[idet]) { - iret[idet] = new int(-1); - Task* task = new Task(new func1_t(&slsDetector::enableDataStreamingFromReceiver, - detectors[idet], enable, iret[idet])); - threadpool->add_task(task); - } - } - threadpool->startExecuting(); - threadpool->wait_for_tasks_to_complete(); - for (int idet = 0; idet < thisMultiDetector->numberOfDetectors; ++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 << idet)); - } - } - } - thisMultiDetector->receiver_upstream = ret; + thisMultiDetector->receiver_upstream = parallelCallDetectorMember(&slsDetector::enableDataStreamingFromReceiver, enable); } - return thisMultiDetector->receiver_upstream; } @@ -6365,11 +6263,9 @@ int multiSlsDetector::pulsePixelNMove(int n, int x, int y) return ret; } - - int multiSlsDetector::pulseChip(int n) { - return parallelCallDetectorMember(&slsDetector::pulseChip, n); + return parallelCallDetectorMember(&slsDetector::pulseChip, n); } void multiSlsDetector::setAcquiringFlag(bool b) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h index 0e41ea029..5c1dbcdd7 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.h @@ -1047,7 +1047,7 @@ class multiSlsDetector : public slsDetectorUtils { std::string callDetectorMemeber(std::string(slsDetector::*somefunc)()); int callDetectorMemeber(int (slsDetector::*somefunc)(int), int value); int parallelCallDetectorMember(int (slsDetector::*somefunc)(int), int value); //Should probably be templated - + int parallelCallDetectorMember(int (slsDetector::*somefunc)()); /** returns the detector trimbit/settings directory \sa sharedSlsDetector */ std::string getSettingsDir();