c++11 返回 std thread 对象

创建日期: 2024-11-18 10:06 | 作者: 风波 | 浏览次数: 15 | 分类: C++

来源:https://stackoverflow.com/questions/60860349/can-i-return-stdthread

例如代码要返回 std::thread 对象

std::thread getWindowThread(std::function<void()> f){
    std::thread t(f);
    return t;
}

那么这个线程对象的行为如下

  1. joinable() is false ~thread(); Effects: If joinable(), calls terminate(). Otherwise, has no effects. 如果是 joinable的线程,那么 return 后,必须要有一个 std::thread 对象来接收这个值,否则会导致线程对象的析构函数被调用,然后就 coredump 了。

  2. 如果要将一个线程对象复制给另一个线程对象,需要使用 std::move ,不然会导致编译错误。

  3. 或者创建线程后执行 t.detach() ,这样即使调用析构函数,也没什么影响。也就不需要在函数返回的时候用另一个对象接收了。

15 浏览
0 评论