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

В C++ существует несколько способов создания новых потоков. Один из самых популярных способов - использование стандартной библиотеки C++11 и выше, которая включает в себя класс std::thread.

Для создания нового потока внутри метода класса, вам понадобится создать объект класса std::thread внутри этого метода. Пример кода, демонстрирующего данную возможность, приведен ниже:

#include <iostream>
#include <thread>

class MyClass {
public:
    void threadFunction() {
        // Код, выполняемый в новом потоке
        for (int i = 0; i < 5; i++) {
            std::cout << "Поток: " << i << std::endl;
        }
    }

    void runThread() {
        // Создание нового потока
        std::thread myThread(&MyClass::threadFunction, this);

        // Ожидание завершения работы потока
        myThread.join();
    }
};

int main() {
    MyClass obj;
    obj.runThread();

    return 0;
}

В данном примере создается класс MyClass, у которого есть два метода: threadFunction() и runThread(). Метод threadFunction() содержит код, который будет выполняться в новом потоке. В методе runThread() создается новый объект myThread класса std::thread с указателем на метод threadFunction() и указателем this, чтобы передать текущий объект MyClass в качестве аргумента. Затем происходит вызов метода join() для ожидания завершения работы созданного потока.

В результате запуска данного кода, вы увидите вывод, в котором происходит обмен между главным потоком и созданным потоком:

Поток: 0
Поток: 1
Поток: 2
Поток: 3
Поток: 4

Обратите внимание, что в данном примере используется метод join() для ожидания завершения работы потока. В случае, если вы не вызовете этот метод, программа может завершиться до окончания выполнения созданного потока. Если вам необходимо продолжить выполнение программы без ожидания завершения потока, вы можете использовать метод detach() вместо join().