c++ jthread

测试下c++ 20的jthread。代码:

cpp 复制代码
void testJThread(void) {
    auto worker = [](std::stop_token st) { // 第一个参数是在线程内部自动传参的,也可以不要这个参数。
        while (!st.stop_requested()) // 查询停止标记
        {
            std::cout << "子线程运行中..." << std::endl;
            std::this_thread::sleep_for(std::chrono::milliseconds(400));
        }
        std::cout << "子线程检测到停止请求,主动退出循环,return" << std::endl;
    };

    {
        std::jthread jth(worker);
        std::cout << "当前线程:sleep 1秒,子线程继续" << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(1)); 
    } // 测试离开作用域,该线程对象执行析构函数
      //  析构函数中自动调用request_stop() 置停止标记, 并自动调用join() 阻塞
      // 也可以不这样, 手动调用request_stop()发停止信号
    std::cout << "jthread 析构完成,回到主线程\n";
}

运行:

ok. jthread有内置停止标记。 而且析构会自动调用停止。

相关推荐
旧梦952716 分钟前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
海兰1 小时前
【 Python 量化交易】开篇
开发语言·python·信息可视化·量化交易
神仙别闹1 小时前
基于C++ WinPcap 的网络抓包软件
网络·c++·php
我的xiaodoujiao1 小时前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
l1t1 小时前
DeepSeek总结的DuckDB在 CI 中为 release 和 glibc CLI 构建启用 LTO - #24225
开发语言·数据库·ci/cd·duckdb
whitelbwwww1 小时前
c++运行RKNN
开发语言·c++
2601_962070232 小时前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言
布莱克6052 小时前
栈(Stack)详解:定义、作用、应用场景及与队列的区别(附 C/C++ 代码)
c语言·开发语言·c++·
zmzb01032 小时前
C++课后习题训练记录Day203
开发语言·c++