1 #ifndef OPENPOSE_THREAD_W_QUEUE_ORDERER_HPP
2 #define OPENPOSE_THREAD_W_QUEUE_ORDERER_HPP
11 template<
typename TDatums>
15 explicit WQueueOrderer(
const unsigned int maxBufferSize = 64u);
19 void work(TDatums& tDatums);
24 const unsigned int mMaxBufferSize;
26 unsigned long long mNextExpectedId;
27 unsigned long long mNextExpectedSubId;
43 template<
typename TDatums>
45 mMaxBufferSize{maxBufferSize},
46 mStopWhenEmpty{
false},
52 template<
typename TDatums>
57 template<
typename TDatums>
64 bool profileSpeed = (tDatums !=
nullptr);
69 auto& tDatumsNoPtr = *tDatums;
71 if (tDatumsNoPtr[0].
id == mNextExpectedId && tDatumsNoPtr[0].subId == mNextExpectedSubId)
74 if (tDatumsNoPtr[0].subIdMax == 0)
80 if (mNextExpectedSubId > tDatumsNoPtr[0].subIdMax)
82 mNextExpectedSubId = 0;
91 mPriorityQueueBuffer.emplace(tDatums);
94 if (mPriorityQueueBuffer.size() > mMaxBufferSize)
96 tDatums = mPriorityQueueBuffer.top();
97 mPriorityQueueBuffer.pop();
105 if (!mPriorityQueueBuffer.empty()
106 && (mStopWhenEmpty ||
107 ((*mPriorityQueueBuffer.top())[0].
id == mNextExpectedId
108 && (*mPriorityQueueBuffer.top())[0].subId == mNextExpectedSubId)))
110 tDatums = { mPriorityQueueBuffer.top() };
111 mPriorityQueueBuffer.pop();
117 const auto& tDatumsNoPtr = *tDatums;
119 if (tDatumsNoPtr[0].subIdMax == 0)
120 mNextExpectedId = tDatumsNoPtr[0].id + 1;
124 mNextExpectedSubId = tDatumsNoPtr[0].subId + 1;
125 if (mNextExpectedSubId > tDatumsNoPtr[0].subIdMax)
127 mNextExpectedSubId = 0;
128 mNextExpectedId = tDatumsNoPtr[0].id + 1;
134 std::this_thread::sleep_for(std::chrono::milliseconds{1});
136 if (profileSpeed || tDatums !=
nullptr)
145 catch (
const std::exception& e)
149 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
153 template<
typename TDatums>
159 if (mPriorityQueueBuffer.empty())
161 mStopWhenEmpty =
true;
164 catch (
const std::exception& e)
166 error(e.what(), __LINE__, __FUNCTION__, __FILE__);
173 #endif // OPENPOSE_THREAD_W_QUEUE_ORDERER_HPP
void work(TDatums &tDatums)
Definition: wQueueOrderer.hpp:58
void initializationOnThread()
Definition: wQueueOrderer.hpp:53
Definition: pointerContainer.hpp:13
static const std::string timerInit(const int line, const std::string &function, const std::string &file)
OP_API void error(const std::string &message, const int line=-1, const std::string &function="", const std::string &file="")
Definition: wQueueOrderer.hpp:12
void tryStop()
Definition: wQueueOrderer.hpp:154
void dLog(const T &message, const Priority priority=Priority::Max, const int line=-1, const std::string &function="", const std::string &file="")
Definition: errorAndLog.hpp:53
bool checkNoNullNorEmpty(const TPointerContainer &tPointerContainer)
Definition: pointerContainer.hpp:7
WQueueOrderer(const unsigned int maxBufferSize=64u)
Definition: wQueueOrderer.hpp:44
static void printAveragedTimeMsOnIterationX(const std::string &key, const int line, const std::string &function, const std::string &file, const unsigned long long x=DEFAULT_X)
COMPILE_TEMPLATE_DATUM(WPoseTriangulation)
static void timerEnd(const std::string &key)