2016-09-14 13 views
6

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.

Odpowiedz

5

Należy określić zakres

&Timer::ThreadFunc 
+0

dziękuję! To działa. – Dragon

Powiązane problemy