Вызовите метод класса внутри потока в C ++ - PullRequest
1 голос
/ 25 мая 2019

Как я могу вызвать метод класса внутри потока? У меня есть простой метод класса и простой поток ... Как я могу выполнить метод де внутри потока? Следуйте коду ...

#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;
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Чтобы дополнить ответ @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.

Или вы можете использовать лямбда-функцию:

auto f = [](Airplaine* av) {av->impress(); };
std::thread first(f, av1);
0 голосов
/ 25 мая 2019

Конструктор потоков довольно умен.Просто скажите ему, какую функцию-член вызывать, и дайте ему объект для вызова функции:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...