std :: bind переменная memeber потока с экземпляром класса - PullRequest
0 голосов
/ 22 апреля 2020

Я запутался в различных способах создания потоков-членов для выполнения функций-членов экземпляра класса и в чем различия между ними: - Первый метод - использование лямбда-выражений

auto m_thread = std::thread([this]{run();});

Второй метод

auto m_thread = std::thread(std::bind(&MyType::run, this));

Третий метод

auto res = std::bind(&m_thread, std::bind(&MyType::run, this));

Четвертый метод -

auto res = std::bind(&m_thread, &MyType::run, this);

Здесь m_thread является переменной-членом класса MyType дано std::thread m_thread, из которых this является экземпляром, а run является функцией-членом того же класса. Дадут ли все они одинаковые результаты и эквивалентны ли они? Кроме того, в двух последних случаях, как заставить поток начать выполняться.

1 Ответ

2 голосов
/ 22 апреля 2020

std::bind ожидает вызова в первом аргументе (но не отклоняет недопустимые аргументы).

Таким образом, 3-й и 4-й метод создают непригодные объекты.

Чтобы создать std::thread, у вас действительно есть несколько доступных вариантов:

  • std::thread(&MyType::run, this);
  • std::thread(std::bind(&MyType::run, this)); Нет преимуществ сверху.
  • std::thread([this](){ return this->run(); ); Позволяет обрабатывать run перегрузки, параметры по умолчанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...