我尝试了下一个代码:
class JustClass
{
public:
void JustFunc()
{
std::thread t(this->JustThread);
t.detach();
}
void JustThread()
{
}
private:
};
它不应该出现任何问题。我只是调用对象的函数来充当线程。 但我得到了下一个错误:
但如果我这样做:
class JustClass
{
public:
void JustFunc()
{
std::thread t(this->JustThread, 5);
t.detach();
}
void JustThread(int just_var)
{
}
private:
};
然后现在我得到了这个Eroor:
Error 2 error C3867: 'JustClass::JustThread': function call missing argument list; use '&JustClass::JustThread' to create a pointer to member c:\users\micha\onedrive\מסמכים\visual studio 2013\projects\project2\project2\source.cpp 58 1 Project2
为什么会有这种奇怪的行为?
最佳答案
您可以像这样传递成员函数指针:
class JustClass
{
public:
void JustFunc()
{
std::thread t(&JustClass::JustThread, this);
t.detach();
}
void JustThread() {}
private:
};
对于你的第二个变体:
class JustClass
{
public:
void JustFunc()
{
std::thread t(&JustClass::JustThread, this, 5);
t.detach();
}
void JustThread(int just_var){}
如果函数被重载,您将需要选择哪个重载。请参阅Jonathan Wakely's Answer相关问题。另请阅读this FAQ关于指向成员函数的指针。
关于c++ - 通过类成员函数与另一个成员调用线程时出现奇怪的行为。消费者保护计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42297140/