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:
l_maliakal_d 2014-02-06 14:54:01 +00:00
parent f5413637c4
commit 83405b70c8
4 changed files with 16 additions and 3 deletions

View File

@ -1365,6 +1365,7 @@ int* multiSlsDetector::readFrame(){
}
}
dataQueue.push(retval);
sem_post(&queue_mutex);
return retval;
};
@ -1400,6 +1401,7 @@ int* multiSlsDetector::readAll(){
//std::cout << "-" << flush;
#endif
dataQueue.push(retval);
sem_post(&queue_mutex);
}
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
if (detectors[id]) {
@ -1440,6 +1442,7 @@ int* multiSlsDetector::startAndReadAll(){
//std::cout << "-" << flush;
#endif
dataQueue.push(retval);
sem_post(&queue_mutex);
}
for (int id=0; id<thisMultiDetector->numberOfDetectors; id++) {
@ -1530,6 +1533,7 @@ slsDetectorDefs::runStatus multiSlsDetector::getRunStatus() {
int* multiSlsDetector::popDataQueue() {
int *retval=NULL;
sem_wait(&queue_mutex);
if( !dataQueue.empty() ) {
retval=dataQueue.front();
dataQueue.pop();
@ -1549,11 +1553,11 @@ detectorData* multiSlsDetector::popFinalDataQueue() {
void multiSlsDetector::resetDataQueue() {
int *retval=NULL;
while( !dataQueue.empty() ) {
sem_wait(&queue_mutex);
retval=dataQueue.front();
dataQueue.pop();
delete [] retval;
}
}
void multiSlsDetector::resetFinalDataQueue() {

View File

@ -3237,6 +3237,7 @@ int* slsDetector::readFrame(){
retval=getDataFromDetector();
if (retval) {
dataQueue.push(retval);
sem_post(&queue_mutex);
controlSocket->Disconnect();
}
}
@ -3333,6 +3334,7 @@ int* slsDetector::readAll(){
//std::cout << "-" << flush ;
#endif
dataQueue.push(retval);
sem_post(&queue_mutex);
}
controlSocket->Disconnect();
}
@ -3393,6 +3395,7 @@ int* slsDetector::startAndReadAll(){
//std::cout<< "-" << flush;
#endif
dataQueue.push(retval);
sem_post(&queue_mutex);
}
controlSocket->Disconnect();

View File

@ -35,7 +35,9 @@ postProcessing::postProcessing(): expTime(NULL), ang(NULL), val(NULL), err(NULL)
pCallbackArg = 0;
//cout << "done "<< endl;
rawDataReady = 0;
pRawDataArg = 0;
pRawDataArg = 0;
sem_init(&queue_mutex,0,0);
#ifdef VERBOSE
registerDataCallback(&defaultDataReadyFunc, NULL);
@ -581,6 +583,7 @@ int* postProcessing::popDataQueue() {
cout << "Pop data queue lock" << endl;
#endif
sem_wait(&queue_mutex);
pthread_mutex_lock(&mp);
if( !dataQueue.empty() ) {
retval=dataQueue.front();
@ -609,6 +612,7 @@ void postProcessing::resetDataQueue() {
int *retval=NULL;
pthread_mutex_lock(&mp);
while( !dataQueue.empty() ) {
sem_wait(&queue_mutex);
retval=dataQueue.front();
dataQueue.pop();
delete [] retval;

View File

@ -17,6 +17,7 @@
#include <sstream>
#include <queue>
#include <math.h>
#include <semaphore.h>
class postProcessingFuncs;
@ -294,8 +295,9 @@ s
/** data queue size */
int queuesize;
/** queue mutex */
sem_t queue_mutex;
/**
start data processing thread