3 #include <condition_variable>
19 std::unique_lock<std::mutex> lock(
guard);
25 std::unique_lock<std::mutex> lock(
guard);
31 std::unique_lock<std::mutex> lock(
guard);
37 std::unique_lock<std::mutex> lock(
guard);
42 std::unique_lock<std::mutex> lock(
guard);
51 template <
typename Rep,
typename Period>
52 bool waitAndConsumeAll(std::function<
void(T&)> callback, std::chrono::duration<Rep, Period> timeout) {
54 std::unique_lock<std::mutex> lock(
guard);
58 if(!pred)
return false;
62 while(!
queue.empty()) {
63 callback(
queue.front());
74 std::unique_lock<std::mutex> lock(
guard);
77 if(
queue.empty())
return false;
80 while(!
queue.empty()) {
81 callback(
queue.front());
92 std::lock_guard<std::mutex> lock(
guard);
94 if(
queue.empty())
return false;
96 while(!
queue.empty()) {
97 callback(
queue.front());
108 std::unique_lock<std::mutex> lock(
guard);
111 while(!
queue.empty()) {
133 template <
typename Rep,
typename Period>
136 std::unique_lock<std::mutex> lock(
guard);
139 while(!
queue.empty()) {
153 if(!pred)
return false;
164 std::lock_guard<std::mutex> lock(
guard);
165 return queue.empty();
169 std::unique_lock<std::mutex> lock(
guard);
174 value =
queue.front();
180 std::lock_guard<std::mutex> lock(
guard);
185 value = std::move(
queue.front());
194 std::unique_lock<std::mutex> lock(
guard);
197 if(
queue.empty())
return false;
200 value = std::move(
queue.front());
207 template <
typename Rep,
typename Period>
210 std::unique_lock<std::mutex> lock(
guard);
214 if(!pred)
return false;
217 value = std::move(
queue.front());
225 std::unique_lock<std::mutex> lock(
guard);
230 unsigned maxSize = std::numeric_limits<unsigned>::max();