Вызов метода в другом потоке

В моем классе существует метод, который должен вызвать другой свой же метод в другом потоке. Компилятор такую ошибку выдает в строке std::thread th(run);

error C3867: "Timer::run": нестандартный синтаксис; используйте "&", чтобы создать указатель на член

void Timer::start()
{
    std::thread th(run);
    th.detach();
}

void Timer::run()
{
    ...
}

реализация метода run на ошибку никак не влияет.


Ответы (1 шт):

Автор решения: Alex Titov

В конструкторе потока надо передать аргументы функции, а у функций класса есть неявный аргумент - собствено объект класса, так что запишите

std::thread th(&Timer::run, this);   // сработало и в MSVC

// std::thread th(run, this);  // этот вариант сработал только на g++

З.Ы. Проверил сперва только на g++

→ Ссылка