std::bind 线程成员变量到 class 的实例

std::bind a thread memeber variable to an instance of a class

我对在 class 实例的成员函数上为 运行 创建成员线程的各种方式感到困惑,以及它们之间的区别是什么:- 第一种方法 - 使用 lambda 表达式

auto m_thread = std::thread([this]{run();});

第二种方法

auto m_thread = std::thread(std::bind(&MyType::run, this));

第三种方法

auto res = std::bind(&m_thread, std::bind(&MyType::run, this));

第四种方法 -

auto res = std::bind(&m_thread, &MyType::run, this);

在这里, m_thread 是 Class MyType 的成员变量,由 std::thread m_thread 给出,其中 this 是一个实例, 运行是同一个class的成员函数。所有这些都会给出相同的结果吗?它们是否等效?还有,最后两种情况如何让线程开始执行。

std::bind 期望第一个参数是可调用的(但不拒绝无效参数)。

所以第 3 和第 4 种方法创建了不可用的对象。

要创建 std::thread,您确实有几个可用的变体:

  • std::thread(&MyType::run, this);
  • std::thread(std::bind(&MyType::run, this));上面没有优势。
  • std::thread([this](){ return this->run(); ); 允许处理 run 重载,默认参数。