通过与另一个成员的类成员函数调用线程时的奇怪行为。 CPP
Posted
技术标签:
【中文标题】通过与另一个成员的类成员函数调用线程时的奇怪行为。 CPP【英文标题】:Weird behavihor when calling thread through class member function with another member. CPP 【发布时间】:2017-02-17 11:46:38 【问题描述】:我尝试了下一个代码:
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
为什么会有这种奇怪的行为?
【问题讨论】:
【参考方案1】:你像这样传递成员函数指针:
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 关于指向成员函数的指针。
【讨论】:
如果你的意思是为什么你可以将非成员函数传递给std::thread
,see 这个问题。另请阅读this FAQ以上是关于通过与另一个成员的类成员函数调用线程时的奇怪行为。 CPP的主要内容,如果未能解决你的问题,请参考以下文章