Mam problem z użyciem std :: wątek w moim kodu:Podania funkcja członek class do std :: wątek
Class Timer
{
...
public:
void Start(bool Asynch = true)
{
if (IsAlive())
{
return;
}
alive = true;
repeat_count = call_number;
if (Asynch)
{
t_thread = std::thread(&ThreadFunc, this);
}
else
{
this->ThreadFunc();
}
}
void Stop()
{
alive = false;
t_thread.join();
}
...
}
mi się następujący błąd:
error C2276: '&': illegal operation on bound member function expression
t_thread jest prywatny std class za :: instancja wątku, ThreadFunc() jest prywatną funkcją klasy, która zwraca void;
Myślę, że rozumiem, że istnieją 2 sposoby wysyłania funkcji członka do std :: thread, jeśli funkcja jest statyczna, użyłbym t_thread = std :: thread (threadfunc); Ale nie chcę, aby ThreadFunc był statyczny, a robienie tego w ten sposób daje mi błąd.
myślę, rozwiązał problem tworząc inną funkcję:
std::thread ThreadReturner()
{
return std::thread([=] { ThreadFunc(); });
}
...
t_thread = ThreadReturner();
ten sposób nie pojawiają się błędy, ale nie rozumiem, dlaczego pierwszy nie działa.
Każda pomoc jest doceniana.
Moje pytanie wygląda jak duplikat, ale jest tylko jedna różnica, w odpowiedzi na drugie pytanie, std :: thread został użyty poza deklaracją klasy lub implementacją, był w main(), w tym przypadku określając zakres robiony dla mnie sens, ale nie wtedy, gdy std :: thread został wywołany wewnątrz klasy. To jedyna różnica, którą zobaczyłem i dlaczego stworzyłem tę nitkę, przepraszam za ewentualny duplikat.
dziękuję! To działa. – Dragon