C++ tips_ 10 关键字 线程问题

14 篇文章 0 订阅

1. 算例

  void handle_accepted(const std::shared_ptr<GoalHandleMoveRobot> goal_handle) {
    using std::placeholders::_1;
    std::thread{std::bind(&ActionRobot01::execute_move, this, _1), goal_handle}
        .detach();
  }

在这段代码中,.detach() 是 std::thread 类的一个成员函数,用于将线程与当前进程分离。

当调用 .detach() 函数时,表示当前线程对象所代表的线程将与主线程(或调用线程)分离。分离后的线程将在后台自行运行,不再与主线程同步。

具体而言,调用 .detach() 之后,主线程不会等待被分离的线程执行完成。分离后的线程将在后台继续执行,直到其完成或终止。被分离的线程的资源将由操作系统进行管理和释放,主线程无需关心它的状态或返回值。

.detach() 的使用场景通常是在不需要等待线程完成的情况下,将任务交给一个独立的线程来执行。例如,在上述代码中,通过调用 .detach(),将 std::bind 绑定的函数对象作为线程执行的任务,让它在后台异步执行,主线程不需要等待其完成。

需要注意的是,一旦线程被分离,就无法再对其进行管理或等待其完成。因此,在使用 .detach() 时,应确保线程的生命周期和资源的管理不会产生问题,以避免悬挂线程或资源泄漏等问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值