尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

std::thread

std::thread
📅 发布时间:2026/7/2 11:12:56
C++ 11 提供的 std::thread 类

无论是 Linux 还是 Windows 上创建线程的 API,都有一个非常不方便的地方,就是线程函数的签名必须是固定的格式(参数个数和类型、返回值类型都有要求)。C++11 新标准引入了一个新的类std::thread(需要包含头文件<thread>),使用这个类的可以将任何签名形式的函数作为线程函数。以下代码分别创建两个线程,线程函数签名不一样:

#include <stdio.h> #include <thread> void threadproc1() { while (true) { printf("I am New Thread 1!\n"); } } void threadproc2(int a, int b) { while (true) { printf("I am New Thread 2!\n"); } } int main() { //创建线程t1 std::thread t1(threadproc1); //创建线程t2 std::thread t2(threadproc2, 1, 2); while (true) { //Sleep(1000); //权宜之计,让主线程不要提前退出 } return 0; }

当然,std::thread在使用上容易犯一个错误,即在std::thread对象在线程函数运行期间必须是有效的。什么意思呢?我们来看一个例子:

#include <stdio.h> #include <thread> void threadproc() { while (true) { printf("I am New Thread!\n"); } } void func() { std::thread t(threadproc); } int main() { func(); while (true) { //Sleep(1000); //权宜之计,让主线程不要提前退出 } return 0; }

上述代码在func中创建了一个线程,然后又在main函数中调用func方法,乍一看好像代码没什么问题,但是在实际运行时程序会崩溃。崩溃的原因是,当func函数调用结束后,func中局部变量t(线程对象)被销毁了,而此时线程函数仍然在运行。这就是我所说的,使用std::thread类时,必须保证线程函数运行期间,其线程对象有效。这是一个很容易犯的错误,解决这个问题的方法是,std::thread对象提供了一个detach方法,这个方法让线程对象与线程函数脱离关系,这样即使线程对象被销毁,仍然不影响线程函数的运行。我们只需要在在func函数中调用detach方法即可,代码如下:

//其他代码保持不变,这里就不重复贴出来了 void func() { std::thread t(threadproc); t.detach(); }

然而,在实际编码中,这也是一个不推荐的做法,原因是我们需要使用线程对象去控制和管理线程的运行和生命周期。所以,我们的代码应该尽量保证线程对象在线程运行期间有效,而不是单纯地调用detach方法使线程对象与线程函数的运行分离。

相关新闻

  • Blender MMD Tools终极指南:跨平台3D动画数据转换完整解决方案
  • paperxie 学术创作工具箱|分模块论文智能撰写方案,适配全学段学术撰稿需求
  • 本地部署AI大模型:隐私保护与高效实践指南

最新新闻

  • 上下文工程:构建大模型的可调度信息操作系统
  • 手把手教你集成商品条码查询API:从原理到实战
  • 大模型稀疏激活机制:2%参数如何实现高效推理
  • Transformer核心原理与工程实践深度解析
  • Mismatch-first Farthest-search:融合不确定性与代表性的主动学习采样法
  • Claude语义压缩层移除:从过程可控到结果可信的架构跃迁

日新闻

  • Python Playwright录制功能:从零到一构建自动化测试脚本
  • 如何用开源工具永久保存你心爱的小说:novel-downloader全攻略
  • In-Context Learning不是教知识,而是模式对齐:从5个示例到100个工业级样本的真相

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号