在C 中的线程中调用类的方法

Call a method of class inside a thread in C++

本文关键字:方法 调用 线程      更新时间:2023-10-16

如何在线程中调用类的类方法?我有一种简单的类方法和一个简单的线程...如何在线程中执行de方法?按照代码...

#include <iostream>
#include<thread>
using namespace std;
class Airplaine{
      public:
      int vel = 0;
      void impress(){ cout << "my impress";} // meu método
};
int main(){
        Airplaine *av1=new Airplaine();
       thread first(meu_method_impress()_here); // my method impress inside a thread
       first.detach();
      return 0;
}

线程构造函数非常聪明。只需告诉它要调用哪个成员函数,然后给它一个对象来调用该函数:

Airplane *av1 = new Airplane;
std::thread first(&Airplane::impress, av1);
first.join(); // wait for thread to finish

或更多的C - 喜欢样式:

Airplane av;
std::thread first(&Airplane::impress, av);
first.join(); // wait for thread to finish

或,如果成员函数修改对象,并且您需要在线程完成后查看这些修改,请通过参考传递对象:

Airplane av;
std::thread first(&Airplane::impress, std::ref(av));
first.join(); // wait for thread to finish

要补充@pete的答案,您可以绑定成员函数并像普通函数一样馈送线程,而正常函数接受对象作为其参数。

Airplaine* av1 = new Airplaine;
std::function<void(Airplaine*)> func = std::bind(&Airplaine::impress, std::placeholders::_1);
std::thread first(func, av1);
first.join();

需要functional标头。

或者您可以使用lambda函数:

auto f = [](Airplaine* av) {av->impress(); };
std::thread first(f, av1);