| 105 | } |
| 106 | |
| 107 | void stop() { |
| 108 | if (!running_.exchange(false)) return; // Already stopped |
| 109 | queue_.shutdown(); |
| 110 | if (producer_.joinable()) producer_.join(); |
| 111 | if (consumer_.joinable()) consumer_.join(); |
| 112 | } |
| 113 | |
| 114 | [[nodiscard]] std::size_t processedCount() const noexcept { |
| 115 | return processed_count_.load(std::memory_order_relaxed); |