9 #ifndef FAIRMQSTATEQUEUE_H_
10 #define FAIRMQSTATEQUEUE_H_
12 #include <fairmq/States.h>
18 #include <condition_variable>
29 fair::mq::State WaitForNext()
31 std::unique_lock<std::mutex> lock(fMtx);
32 while (fStates.empty()) {
33 fCV.wait_for(lock, std::chrono::milliseconds(50));
36 fair::mq::State state = fStates.front();
38 if (state == fair::mq::State::Error) {
46 template<
typename Rep,
typename Period>
47 std::pair<bool, fair::mq::State> WaitForNext(std::chrono::duration<Rep, Period>
const& duration)
49 std::unique_lock<std::mutex> lock(fMtx);
50 fCV.wait_for(lock, duration);
52 if (fStates.empty()) {
53 return {
false, fair::mq::State::Ok };
56 fair::mq::State state = fStates.front();
58 if (state == fair::mq::State::Error) {
59 throw DeviceErrorState(
"Controlled device transitioned to error state.");
63 return {
true, state };
66 void WaitForState(fair::mq::State state) {
while (WaitForNext() != state) {} }
68 void Push(fair::mq::State state)
71 std::lock_guard<std::mutex> lock(fMtx);
79 std::lock_guard<std::mutex> lock(fMtx);
80 fStates = std::queue<fair::mq::State>();
84 std::queue<fair::mq::State> fStates;
86 std::condition_variable fCV;