【发布时间】:2013-09-03 15:26:26
【问题描述】:
每次调用 ObjParser::loadData() 时,我都会尝试启动一个新线程,就像他们在 this 示例中所做的那样。
所以我写了这段代码。
#include <thread>
void ObjParser::loadData()
{
thread loadingThread(_loadData);
loadingThread.detach();
}
void ObjParser::_loadData()
{
//some code
}
但是当我尝试编译它时,我得到了这个错误:
error C3867: 'ObjParser::_loadData': function call missing argument list; use '&ObjParser::_loadData' to create a pointer to member
所以我创建了一个指向成员函数的指针:
#include <thread>
void ObjParser::loadData()
{
thread loadingThread(&ObjParser::_loadData);
loadingThread.detach();
}
void ObjParser::_loadData()
{
//some code
}
然后编译器抱怨:
error C2064: term does not evaluate to a function taking 0 arguments
我不知道是什么导致了这个问题,请你给我一个提示如何解决这个问题。
【问题讨论】:
-
您需要添加一个实例参数,在该参数上将调用成员函数。见这里stackoverflow.com/a/10673671/893693。注意:如果你不复制它,请注意对象的生命周期。
-
您确定要在此处创建话题吗?一个分离的线程?
std::async是否更适合您的目的? -
你确定线程分离是个好主意吗?
-
感谢您的回答。为什么使用 detach() 不是一个好主意?如果我不使用 detach(),我由线程对象启动的操作将被停止,不是吗?
标签: c++ multithreading c++11 stl