mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 07:20:01 +02:00
replaced usleep which waits for queue to have data, with semaphores
git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@732 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
parent
f5413637c4
commit
83405b70c8
@ -1365,6 +1365,7 @@ int* multiSlsDetector::readFrame(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -1400,6 +1401,7 @@ int* multiSlsDetector::readAll(){
|
|||||||
//std::cout << "-" << flush;
|
//std::cout << "-" << flush;
|
||||||
#endif
|
#endif
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
}
|
}
|
||||||
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
|
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
|
||||||
if (detectors[id]) {
|
if (detectors[id]) {
|
||||||
@ -1440,6 +1442,7 @@ int* multiSlsDetector::startAndReadAll(){
|
|||||||
//std::cout << "-" << flush;
|
//std::cout << "-" << flush;
|
||||||
#endif
|
#endif
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
|
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
|
||||||
@ -1530,6 +1533,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getRunStatus() {
|
|||||||
|
|
||||||
int* multiSlsDetector::popDataQueue() {
|
int* multiSlsDetector::popDataQueue() {
|
||||||
int *retval=NULL;
|
int *retval=NULL;
|
||||||
|
sem_wait(&queue_mutex);
|
||||||
if( !dataQueue.empty() ) {
|
if( !dataQueue.empty() ) {
|
||||||
retval=dataQueue.front();
|
retval=dataQueue.front();
|
||||||
dataQueue.pop();
|
dataQueue.pop();
|
||||||
@ -1549,11 +1553,11 @@ detectorData* multiSlsDetector::popFinalDataQueue() {
|
|||||||
void multiSlsDetector::resetDataQueue() {
|
void multiSlsDetector::resetDataQueue() {
|
||||||
int *retval=NULL;
|
int *retval=NULL;
|
||||||
while( !dataQueue.empty() ) {
|
while( !dataQueue.empty() ) {
|
||||||
|
sem_wait(&queue_mutex);
|
||||||
retval=dataQueue.front();
|
retval=dataQueue.front();
|
||||||
dataQueue.pop();
|
dataQueue.pop();
|
||||||
delete [] retval;
|
delete [] retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void multiSlsDetector::resetFinalDataQueue() {
|
void multiSlsDetector::resetFinalDataQueue() {
|
||||||
|
@ -3237,6 +3237,7 @@ int* slsDetector::readFrame(){
|
|||||||
retval=getDataFromDetector();
|
retval=getDataFromDetector();
|
||||||
if (retval) {
|
if (retval) {
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
controlSocket->Disconnect();
|
controlSocket->Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3333,6 +3334,7 @@ int* slsDetector::readAll(){
|
|||||||
//std::cout << "-" << flush ;
|
//std::cout << "-" << flush ;
|
||||||
#endif
|
#endif
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
}
|
}
|
||||||
controlSocket->Disconnect();
|
controlSocket->Disconnect();
|
||||||
}
|
}
|
||||||
@ -3393,6 +3395,7 @@ int* slsDetector::startAndReadAll(){
|
|||||||
//std::cout<< "-" << flush;
|
//std::cout<< "-" << flush;
|
||||||
#endif
|
#endif
|
||||||
dataQueue.push(retval);
|
dataQueue.push(retval);
|
||||||
|
sem_post(&queue_mutex);
|
||||||
}
|
}
|
||||||
controlSocket->Disconnect();
|
controlSocket->Disconnect();
|
||||||
|
|
||||||
|
@ -37,6 +37,8 @@ postProcessing::postProcessing(): expTime(NULL), ang(NULL), val(NULL), err(NULL)
|
|||||||
rawDataReady = 0;
|
rawDataReady = 0;
|
||||||
pRawDataArg = 0;
|
pRawDataArg = 0;
|
||||||
|
|
||||||
|
sem_init(&queue_mutex,0,0);
|
||||||
|
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
registerDataCallback(&defaultDataReadyFunc, NULL);
|
registerDataCallback(&defaultDataReadyFunc, NULL);
|
||||||
#endif
|
#endif
|
||||||
@ -581,6 +583,7 @@ int* postProcessing::popDataQueue() {
|
|||||||
cout << "Pop data queue lock" << endl;
|
cout << "Pop data queue lock" << endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
sem_wait(&queue_mutex);
|
||||||
pthread_mutex_lock(&mp);
|
pthread_mutex_lock(&mp);
|
||||||
if( !dataQueue.empty() ) {
|
if( !dataQueue.empty() ) {
|
||||||
retval=dataQueue.front();
|
retval=dataQueue.front();
|
||||||
@ -609,6 +612,7 @@ void postProcessing::resetDataQueue() {
|
|||||||
int *retval=NULL;
|
int *retval=NULL;
|
||||||
pthread_mutex_lock(&mp);
|
pthread_mutex_lock(&mp);
|
||||||
while( !dataQueue.empty() ) {
|
while( !dataQueue.empty() ) {
|
||||||
|
sem_wait(&queue_mutex);
|
||||||
retval=dataQueue.front();
|
retval=dataQueue.front();
|
||||||
dataQueue.pop();
|
dataQueue.pop();
|
||||||
delete [] retval;
|
delete [] retval;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <semaphore.h>
|
||||||
|
|
||||||
class postProcessingFuncs;
|
class postProcessingFuncs;
|
||||||
|
|
||||||
@ -294,7 +295,8 @@ s
|
|||||||
/** data queue size */
|
/** data queue size */
|
||||||
int queuesize;
|
int queuesize;
|
||||||
|
|
||||||
|
/** queue mutex */
|
||||||
|
sem_t queue_mutex;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user