gpt4 book ai didi

c++ - 如何使用类c++的线程成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:22 25 4
gpt4 key购买 nike

我想要一个线程变量作为这样的类成员:

class Example{
public:
void startTask();
private:
std::thread m_taskThread;
}

我的问题是:

  1. 假设这个线程对象的创建将发生在startTask()中,这个线程对象的作用域是什么?它会一直存在到 Example 类对象像普通成员变量一样被销毁吗?或者它的范围是那个特定方法(startTask())的范围?

  2. 如果我希望这个线程与 Example 对象一样长,我应该在哪里调用生成线程的 .join()?在 Example 类的析构函数中?

  3. 一些资料( https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/ )网上说如果我需要使用 std::thread 作为成员变量,我应该创建 move-only 类,这是为什么?

  4. 有一个线程对象作为成员变量好不好?原因?

最佳答案

Assuming that the creation of this thread object will happen in startTask(), what is the scope of this thread object? Does it live till the Example class object gets destroyed like normal member variables? Or its scope is the scope of that particular method(startTask())?

thread 对象的范围在 Example 对象的级别。但是,在您调用 startTask() 之前线程不会开始运行。不要混淆线程实例和正在运行的线程实例。

Where should I call .join() on the spawned thread if I want this thread to live as long as the Example object? In the destructor of Example class?

是的,您可以在析构函数中调用它并且它是安全的。

Some material(https://thispointer.com/c11-how-to-use-stdthread-as-a-member-variable-in-class/) online says I should create move-only class if I need to use std::thread as member variable, why is that?

因为 std::thread 是不可复制的,但它是可移动的。所以你的示例类也不能复制。

Is it good to have a thread object as a member variable? Reasons?

是的,为什么不呢。我认为这没有问题。您创建一个负责管理资源的类,即线程。

关于c++ - 如何使用类c++的线程成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com