Я пытаюсь создать поток из моего класса, и поток выполняет определенный метод в моем классе. Код выглядит так:
class ThreadClass{
int myThread(int arg){
// do something
}
void createThread(){
thread t = thread(myThread,10);
}
} ;
Этот код при компиляции выдает ошибку
std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = int (ThreadClass::*)(int), _Args = {int}]
no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘int (ThreadClass::*&&)(int)’
Я не уверен, что здесь на самом деле ошибка. Может кто-то помочь мне с этим?
Благодарю.
Проблема в том, что функция-член не может быть вызвана без объекта. Предоставить указатель на this
так что текущий объект используется:
thread t(&ThreadClass::myThread, this, 10);
Вы можете использовать экземпляр любого ThreadClass
объект, но в вашем случае, похоже this
это правильная вещь.
ПРИМЕЧАНИЕ: Помните, что вам нужна ссылка на созданный поток, чтобы вы могли сделать join()
позже.
Других решений пока нет …