📅  最后修改于: 2023-12-03 15:13:57.722000             🧑  作者: Mango
在 C++ 中,线程可以在类的内部使用,这使得线程的创建和管理变得更加简单和方便。在此处,我们将讨论如何在 C++ 中使用类线程。
要在类的内部创建线程,我们需要遵循以下步骤:
让我们看一个示例:
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
控制线程的行为,并等待线程完成。