跳转至

ev-spdlog-condvar-periodic-worker-001

字段 值
项目 gabime/spdlog
固定 commit 79524ddd08a4
路径 include/spdlog/details/periodic_worker.h
行段 L31-L39
特性 std::condition_variable
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-11-03
测试代码 否
发现方式 manual

用法

用 condition_variable::wait_for 配合谓词实现可中断的周期任务

为什么典型

工作线程需要按固定间隔执行回调,同时在析构时立即醒来退出;wait_for 的谓词检查 active_,把超时与停止条件合并成一次等待。

摘录

        worker_thread_ = std::thread([this, callback_fun, interval]() {
            for (;;) {
                std::unique_lock<std::mutex> lock(this->mutex_);
                if (this->cv_.wait_for(lock, interval, [this] { return !this->active_; })) {
                    return;  // active_ == false, so exit this thread
                }
                callback_fun();
            }
        });

备注

生产头文件;wait_for 返回 true 表示谓词成立而非超时,代码据此区分“停止”与“又到周期”。

查看固定 commit 源码 · 返回证据索引