繁体   English   中英

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

[英]Call a method of class inside a thread in C++

如何在线程内调用类的方法? 我有一个简单的类方法和一个简单的线程...如何在线程内执行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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM