|
|
|
@ -127,6 +127,9 @@ private:
@@ -127,6 +127,9 @@ private:
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
//! Mutex to ensure only one concurrent CCheckQueueControl
|
|
|
|
|
boost::mutex ControlMutex; |
|
|
|
|
|
|
|
|
|
//! Create a new check queue
|
|
|
|
|
CCheckQueue(unsigned int nBatchSizeIn) : nIdle(0), nTotal(0), fAllOk(true), nTodo(0), fQuit(false), nBatchSize(nBatchSizeIn) {} |
|
|
|
|
|
|
|
|
@ -161,12 +164,6 @@ public:
@@ -161,12 +164,6 @@ public:
|
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool IsIdle() |
|
|
|
|
{ |
|
|
|
|
boost::unique_lock<boost::mutex> lock(mutex); |
|
|
|
|
return (nTotal == nIdle && nTodo == 0 && fAllOk == true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -177,16 +174,18 @@ template <typename T>
@@ -177,16 +174,18 @@ template <typename T>
|
|
|
|
|
class CCheckQueueControl |
|
|
|
|
{ |
|
|
|
|
private: |
|
|
|
|
CCheckQueue<T>* pqueue; |
|
|
|
|
CCheckQueue<T> * const pqueue; |
|
|
|
|
bool fDone; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
CCheckQueueControl(CCheckQueue<T>* pqueueIn) : pqueue(pqueueIn), fDone(false) |
|
|
|
|
CCheckQueueControl() = delete; |
|
|
|
|
CCheckQueueControl(const CCheckQueueControl&) = delete; |
|
|
|
|
CCheckQueueControl& operator=(const CCheckQueueControl&) = delete; |
|
|
|
|
explicit CCheckQueueControl(CCheckQueue<T> * const pqueueIn) : pqueue(pqueueIn), fDone(false) |
|
|
|
|
{ |
|
|
|
|
// passed queue is supposed to be unused, or NULL
|
|
|
|
|
if (pqueue != NULL) { |
|
|
|
|
bool isIdle = pqueue->IsIdle(); |
|
|
|
|
assert(isIdle); |
|
|
|
|
ENTER_CRITICAL_SECTION(pqueue->ControlMutex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -209,6 +208,9 @@ public:
@@ -209,6 +208,9 @@ public:
|
|
|
|
|
{ |
|
|
|
|
if (!fDone) |
|
|
|
|
Wait(); |
|
|
|
|
if (pqueue != NULL) { |
|
|
|
|
LEAVE_CRITICAL_SECTION(pqueue->ControlMutex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|