gpt4 book ai didi

c++ - 在单独的线程中运行成员函数

转载 作者:行者123 更新时间:2023-11-27 23:57:51 27 4
gpt4 key购买 nike

我正在尝试在其自己的线程中运行一个成员函数,并已遵循 this post ,但是在那个例子中,线程在同一个函数中开始和结束。您如何维护对线程的引用以加入单独的成员函数(比如析构函数)?我试过这个:

class foo
{
foo();
~foo();
volatile sig_atomic_t m_run_thread = true;
std::thread &m_read_thread;
void read_thread();

}

foo::foo():m_read_thread(std::thread(&foo::read_thread, this))
{
}

foo::~foo()
{
m_run_thread = false;
m_read_thread.join();
}

void foo::read_thread()
{
while(m_run_thread)
{
//do something cool
}
}

int main()
{
foo bar;
//do other stuff
}

虽然编译器给我一个错误:错误:从类型“std::thread”的右值对类型“std::thread&”的非常量引用进行无效初始化。这是因为我试图将临时绑定(bind)到引用。解决此问题的最佳方法是什么?

最佳答案

foo::foo():m_read_thread(std::thread(&foo::read_thread, this)) 不会像 std::thread(&foo::read_thread , this) 是临时值,临时值不​​能绑定(bind)到非 const 左值引用。

也就是说没有理由让线程成员成为引用。您可以简单地拥有一个 std::thread 成员,例如 std::thread m_read_thread;,然后在构造函数中将其初始化为

foo::foo() : m_read_thread(std::thread(&foo::read_thread, this))

关于c++ - 在单独的线程中运行成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270300/

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