首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中调用线程中类的方法

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

Stack Overflow用户
提问于 2019-05-24 23:54:45
回答 2查看 1.9K关注 0票数 2

如何在线程中调用类的方法?我有一个简单的课堂方法和一个简单的线索.如何在线程中执行de方法?按照密码..。

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-25 12:54:52

为了补充@Pete的回答,您可以绑定成员函数并提供线程,就像接受对象作为参数的普通函数一样。

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
auto f = [](Airplaine* av) {av->impress(); };
std::thread first(f, av1);
票数 0
EN

Stack Overflow用户

发布于 2019-05-25 00:28:37

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

代码语言:javascript
复制
Airplane *av1 = new Airplane;
std::thread first(&Airplane::impress, av1);
first.join(); // wait for thread to finish

或者,以更像C++的风格:

代码语言:javascript
复制
Airplane av;
std::thread first(&Airplane::impress, av);
first.join(); // wait for thread to finish

或者,如果成员函数修改了对象,并且需要在线程完成后看到这些修改,则通过引用传递对象:

代码语言:javascript
复制
Airplane av;
std::thread first(&Airplane::impress, std::ref(av));
first.join(); // wait for thread to finish
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56300636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档