C ++创建一个线程并通过引用传递Object

时间:2017-12-12 06:10:25

标签: c++ multithreading

目前尝试通过引用传递一个对象到另一个线程,但是当我尝试构建我的解决方案时出现错误。

void OrderServer(Orders& customerOrders)
{
    Item tempItem;
    customerOrders.add(tempItem);
}

int main()
{
Orders customerOrders();
auto serverThread = std::thread(OrderServer, std::cref(customerOrders));
serverThread.detach();
return 0;
}

以下是错误:

c:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.11.25503 \ include \ thr \ xthread(240):错误C2672:' std :: invoke& #39;:找不到匹配的重载函数 1> c:\ program files(x86)\ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.11.25503 \ include \ thr \ xthread(248):注意:参见函数模板实例化' void std :: _ LaunchPad< _Target> :: _ Execute< 0,1>(std :: tuple>&,std :: integer_sequence< _Ty,0,1>)'正在编制

2 个答案:

答案 0 :(得分:2)

Orders customerOrders();声明一个函数。这被称为最令人烦恼的解析。

您只需使用Orders customerOrders;

即可

答案 1 :(得分:0)

您可以尝试简单地说:

auto serverThread = std::thread(OrderServer, customerOrders);

(和told by François Moisan一样,在声明customerOrders时,您会输入拼写错误。

没有任何std::cref。但是,您的线程稍后会被分离,但customerOrders会因main的返回而被销毁。这可能是undefined behavior,因为OrderServer然后使用对某个不再存在的对象的引用。