设置线程函数时,std :: thread in c ++ cant error

时间:2017-01-12 08:25:03

标签: c++ c++11 std

我试图在c ++中使用std :: thread但没有成功:

A.h

class A
{
   public:
      A();
      void MainThread();
      Init();

   private:
      std::thread currThread;
}

A.cpp

A::A()
{

}


void A::Init()
{
    currThread = std::thread(A::MainThread); 
    //currThread = std::thread(&MainThread);
}

void A::MainThread()
{
    while (true)
    {
        std::cout << "Just For Example...");
    }
}

尝试使用MainFunction创建线程时,我在Init函数中遇到编译错误

我做错了什么,如何解决?

1 个答案:

答案 0 :(得分:0)

由于MainThread()方法不是静态的,它对于不同的对象会存在很多次,所以你需要指出你所指的是属于this对象的方法(你的对象)正在调用Init()

您的代码有许多令人担忧的问题(语法错误,无限循环等)。您的示例代码(使用修复程序)应如下所示:

// A.hpp
#ifndef A_HPP
#define A_HPP

#include <thread>

class A
{
   public:
      void Init();
      void MainThread();

   private:
      std::thread currThread;
};

#endif // A_HPP

// A.cpp
#include <iostream>
#include <thread>
#include "A.h"

void A::Init()
{
    this->currThread = std::thread(&A::MainThread, this);
}

void A::MainThread()
{
    //this loop will run forever
    while (true)
    {
        std::cout << "Just For Example...";
    }
}