Как правильно выполнить метод класса в потоке? Вот есть у нас класс MyClass, и в этом классе есть метод, который по определенному условию вызывает другой метод в новом потоке, вот только я не совсем уверен, что делаю это правильно. Поэтому обращаюсь к вам.
Вот как сделал я:std::thread NewThread(&ClientThread, *this, NewConn);
Не буду много разглагольствовать.. Меня смущает *this.
Спасибо.

21 Авг 2019 в 06:58
192 +1
0
Ответы
1

Для выполнения метода класса в новом потоке, правильным способом будет передача указателя на метод и объект класса в конструктор std::thread таким образом:

std::thread NewThread(&MyClass::ClientThread, this, NewConn);

Здесь MyClass::ClientThread - указатель на метод ClientThread класса MyClass, this - указатель на объект класса MyClass, а NewConn - аргументы метода ClientThread.

В данном случае использование *this неверно, так как это будет попытка разыменования указателя на объект класса, что недопустимо в данном контексте.

Таким образом, исправленный вариант создания нового потока должен выглядеть примерно так:

std::thread NewThread(&MyClass::ClientThread, this, NewConn);

Полученный поток будет запускать метод ClientThread объекта класса MyClass с аргументами NewConn в новом потоке.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир