📜  c++ thread incide class - C++ (1)

📅  最后修改于: 2023-12-03 15:13:57.722000             🧑  作者: Mango

C++ 中的类线程

在 C++ 中,线程可以在类的内部使用,这使得线程的创建和管理变得更加简单和方便。在此处,我们将讨论如何在 C++ 中使用类线程。

创建类线程

要在类的内部创建线程,我们需要遵循以下步骤:

  1. 创建一个成员函数,并将其设置为静态的,以便我们可以将其传递给线程函数。
  2. 在这个静态函数中,我们将调用类的另一个成员函数来执行线程的操作。

让我们看一个示例:

class MyClass {
public:
  void start_thread() {
    std::thread t(&MyClass::do_work, this);
    t.detach();
  }

private:
  void do_work() {
    // 执行线程操作
  }
};

在上面的代码中,我们创建了一个名为 start_thread 的成员函数,它创建了一个线程,并使用 this 关键字将当前类实例传递给静态函数 do_work

do_work 中,我们可以执行线程的任何操作。

要启动此线程,我们只需在主程序中创建 MyClass 实例并调用 start_thread

int main() {
  MyClass my_object;
  my_object.start_thread();
  // 其他操作
  return 0;
}
管理类线程

在 C++ 中,当线程结束时,它将自动销毁。但是,我们通常需要在代码的某个时间点中检查线程的状态,或者等待线程完成。在这种情况下,我们可以使用类的另一个成员函数来控制线程的行为。

class MyClass {
public:
  MyClass() : m_is_done(false) {}

  void start_thread() {
    std::thread t(&MyClass::do_work, this);
    t.detach();
  }

  void wait_for_thread() {
    while (!m_is_done) {
      // 等待线程完成
    }
  }

private:
  void do_work() {
    // 执行线程操作
    m_is_done = true;
  }

  bool m_is_done;
};

在上面的代码中,我们添加了另一个成员函数 wait_for_thread,该函数将循环等待线程完成。线程完成后,它将将 m_is_done 成员设置为 true

在主程序中,我们可以控制线程的行为:

int main() {
  MyClass my_object;

  my_object.start_thread();

  // 控制线程行为
  my_object.wait_for_thread();

  return 0;
}

在上面的代码中,我们使用 wait_for_thread 控制线程的行为,并等待线程完成。