Mercurial > hg > orthanc
comparison Core/MultiThreading/SharedMessageQueue.cpp @ 723:0da078f3affc
multithreading tests
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 18 Feb 2014 16:18:42 +0100 |
parents | 2d0a347e8cfc |
children | a811bdf8b8eb |
comparison
equal
deleted
inserted
replaced
722:3596177682a9 | 723:0da078f3affc |
---|---|
87 } | 87 } |
88 } | 88 } |
89 | 89 |
90 std::auto_ptr<IDynamicObject> message(queue_.front()); | 90 std::auto_ptr<IDynamicObject> message(queue_.front()); |
91 queue_.pop_front(); | 91 queue_.pop_front(); |
92 emptied_.notify_all(); | 92 |
93 if (queue_.empty()) | |
94 { | |
95 emptied_.notify_all(); | |
96 } | |
93 | 97 |
94 return message.release(); | 98 return message.release(); |
95 } | 99 } |
96 | 100 |
97 | 101 |
99 bool SharedMessageQueue::WaitEmpty(int32_t millisecondsTimeout) | 103 bool SharedMessageQueue::WaitEmpty(int32_t millisecondsTimeout) |
100 { | 104 { |
101 boost::mutex::scoped_lock lock(mutex_); | 105 boost::mutex::scoped_lock lock(mutex_); |
102 | 106 |
103 // Wait for the queue to become empty | 107 // Wait for the queue to become empty |
104 if (!queue_.empty()) | 108 while (!queue_.empty()) |
105 { | 109 { |
106 if (millisecondsTimeout == 0) | 110 if (millisecondsTimeout == 0) |
107 { | 111 { |
108 emptied_.wait(lock); | 112 emptied_.wait(lock); |
109 } | 113 } |