通过类成员函数与另一个成员调用线程时的奇怪行为。 CPP

时间:2017-02-17 11:46:38

标签: c++ multithreading

我尝试了下一个代码:

class JustClass
{
public:
    void JustFunc()
    {
        std::thread t(this->JustThread);
        t.detach();
    }

    void JustThread()
    {

    }

private:

};

它不应该做任何问题。我只是调用我的对象的函数来像一个线程。 但我得到了下一个错误:

The Eroor I get on the codoe above

但如果我这样做:

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 个答案:

答案 0 :(得分:2)

您传递成员函数指针,如下所示:

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关于成员函数的指针。