c++ - 通过类成员函数与另一个成员调用线程时出现奇怪的行为。消费者保护计划

标签 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

为什么会有这种奇怪的行为?

最佳答案

您可以像这样传递成员函数指针:

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/

相关文章:

c++ - 为什么函数不给出整数溢出

c++ - 错误 C2065 : 'cout' : undeclared identifier

c++ - 如何找出std::vector中是否存在某个元素?

c++ - 为 Rad Studio 更新 boost 库

c++ - 错误,动态分配对象到数组

ios - 您如何等待主队列完成处理程序?

python - Python:确保并发线程已完成

python - 如何修复这个多线程 Python 脚本?

c# - Monitor.Pulse 的目的

python - 以不同的速率完成线程并与结果交互