在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);
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- C++:使用方法调用析构函数的顺序是什么?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- 指向类方法调用的指针
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何缩短C++中的方法调用?
- 从部分专用模板方法调用模板非静态方法
- 有没有办法禁止派生类中的基类方法调用?
- 为什么这C++只在编译器上编码一个不明确的方法调用Microsoft?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 虚拟函数在哪里使用 vpointer to vtable 来解析方法调用,非虚拟方法存储在哪里以及如何解析它们?
- 从静态方法调用静态函数指针
- 从同一类中的另一个方法调用方法时出错
- 方法调用意外地像 l 值一样起作用
- 无法从派生的一个方法调用基类方法
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- C 多线程JAVA JNI方法调用