Создание потока к объекту класса

0

У меня есть объект класса Chat *p, и я ищу, чтобы запустить метод Foo(int num) на нем (обычно работает p → Foo(3)). Я написал этот код:

    std::thread F(&Chat::Foo, 4);

хотя, это не компилируется для меня, и я также вижу, что theres ошибка, так как я не смог поместить p → Foo в нее (вместо &Chat::Foo...)

Как я могу запустить этот код правильно?

Благодарю!

  • 0
    Если вы можете сделать свой метод Foo статическим, сделайте его статическим
Теги:
class
multithreading

1 ответ

1
Лучший ответ

Ответ от того, как работают объектные методы. Когда вы вызываете p->foo(3) то, что компилятор переводит, грубо говоря, это Chat::foo(p, 3). P всегда передается как скрытый параметр при любом вызове функции. C++ не показывает вам это, и вы не можете на самом деле вызвать Chat::foo(p, 3), это просто не разрешено, но это примерно так, как все работает на самом деле.

Переменная this, которая доступна в любой функции члена только адрес, который передается в качестве скрытого первого параметра и любых переменных - членов, доступ к которым в функции ведения скрытого первого параметра. Итак... что вам нужно сделать, чтобы вызвать любую функцию-член в качестве отправной точки для потока, передает указатель на объект в качестве первого параметра. std::thread F(&Chat::Foo, p, 4); будет, я считаю, правильно начать поток.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню