将类的成员函数传递给 std::thread
Passing class's member function to std::thread
在我的代码中使用std::thread有一个问题:
Class Timer
{
...
public:
void Start(bool Asynch = true)
{
if (IsAlive())
{
return;
}
alive = true;
repeat_count = call_number;
if (Asynch)
{
t_thread = std::thread(&ThreadFunc, this);
}
else
{
this->ThreadFunc();
}
}
void Stop()
{
alive = false;
t_thread.join();
}
...
}
我得到以下错误:
错误C2276: '&':绑定成员函数表达式的非法操作
t_thread是类的私有std::thread实例,ThreadFunc()是返回void的类的私有成员函数;
我想我明白有2种方式发送成员函数std::线程,如果函数是静态的,我会使用t_thread = std::thread(threadfunc);但是我不希望ThreadFunc是静态的,这样做会给我错误。
我想我通过创建另一个函数解决了这个问题:
std::thread ThreadReturner()
{
return std::thread([=] { ThreadFunc(); });
}
...
t_thread = ThreadReturner();
这样我不会得到错误,但我不明白为什么第一个不工作。
任何帮助都是感激的。
我的问题看起来像一个重复,但只有一个不同,在另一个问题的答案中,std::thread在类声明或实现之外使用,它在main()中,在这种情况下指定作用域对我有意义,但当std::thread在类内部调用时就没有意义了。这是我看到的唯一的区别,为什么我做这个线程,抱歉可能重复。
你应该指定作用域
&Timer::ThreadFunc
相关文章:
- 在std::thread中,joinable()然后join()线程安全吗
- 分离一个静态常量 std::thread?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何从 std::thread 返回值
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- 如何防止 std::thread 在 QT 中冻结 GUI?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 为什么参数在构造 std::thread 时移动两次
- std::thread::_Invoker 使用线程编程时出错
- 在线程 A 中创建一个 std::thread 对象,在线程 B 中连接
- 为什么编译器抱怨 std::thread 参数在转换为右值后必须是可调用的?
- ZeroMQ 在使用 std::thread 创建工作线程时崩溃
- 在没有复制构造函数的对象的成员函数中启动 std::thread
- CLang:在 std::thread 中运行函数会导致结构创建BAD_ACCESS
- 调用以CWinThread为基的类运算符()的std::thread失败
- 如何通过std::thread生成多个线程
- std::future::get()或std::future::wait()是std::thread::join()的替