| 328 | } |
| 329 | |
| 330 | bool InputQueue::tryPop(Message* messageOut, int64_t maxFrame) { |
| 331 | // Check if queue is empty before locking, to avoid frequent unnecessary locking |
| 332 | if (internal->queue.empty()) |
| 333 | return false; |
| 334 | |
| 335 | std::lock_guard<std::mutex> lock(internal->mutex); |
| 336 | |
| 337 | if (internal->queue.empty()) |
| 338 | return false; |
| 339 | |
| 340 | const SeqMessage& s = internal->queue.top(); |
| 341 | if (s.message.getFrame() <= maxFrame) { |
| 342 | *messageOut = s.message; |
| 343 | internal->queue.pop(); |
| 344 | return true; |
| 345 | } |
| 346 | |
| 347 | return false; |
| 348 | } |
| 349 | |
| 350 | size_t InputQueue::size() { |
| 351 | return internal->queue.size(); |