在C ++中使用带有Classes的线程

时间:2015-05-12 16:11:20

标签: c++ multithreading object

假设我有一个名为myObject类myObject的对象。它有一个功能

void myFunction()

用线程调用此函数的语法是什么?

我试过

std::thread myThread(myObject.myFunction) 

但我发现语法错误,似乎无法找到正确的语法。

错误消息是:

function" std :: thread :: thread(const std :: thread&)"无法引用 - 它是一个已删除的函数

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你可以写:

std::thread myThread(std::bind(&myClass::myFunction, myObject));

成为myClass myObject的班级名称。这是指向成员函数的指针的语法。

此外,您可以在myFunction之后添加myObject所需的任何其他参数。

答案 1 :(得分:0)

根据GCC,这里是错误:http://coliru.stacked-crooked.com/a/4fcba365c9b25d1e

这是有道理的,因为成员函数绑定到this指针,成员变量等等。我要使用lambda表达式:

std::thread t ([&]{
   myObject.myFunction();
}) 

工作示例:http://coliru.stacked-crooked.com/a/0be834a7249bfac9

顺便说一句,这种用匿名函数包装所有内容的做法在JavaScript中很常见,也应该在这里使用

答案 2 :(得分:0)

可能duplicate

std::thread myThread(&myClass.myFunction, myObject)