2016-09-14 22 views
6

私はSTDを使用して問題を持っている::私のコード内のスレッド:渡すクラスのメンバ関数::スレッド

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(); 
    } 
... 
} 

私は次のエラーを取得する:

error C2276: '&': illegal operation on bound member function expression

t_threadは、クラスのプライベートSTDです:: thread instance、ThreadFunc()は、voidを返すクラスのプライベートメンバ関数です。

私はメンバー関数をstd :: threadに送る2つの方法があると思いますが、関数が静的であればt_thread = std :: thread(threadfunc)を使用します。しかし、私はThreadFuncを静的にしたくないので、このようにするとエラーになります。

私は、私は別の関数を作成することで問題を解決したと思う:私はエラーを取得しない

std::thread ThreadReturner() 
{ 
    return std::thread([=] { ThreadFunc(); }); 
} 
... 
t_thread = ThreadReturner(); 

この方法ではなく、最初の1が動作しない理由を私は理解していません。

何か助けていただければ幸いです。

私の質問は重複のように見えますが、他の質問の答えでは、std :: threadはクラス宣言や実装の外側で使用されていましたが、main()私には感謝しますが、std :: threadがクラスの内部で呼び出されたときはそうではありません。それが私が見た唯一の違いで、なぜこのスレッドを作ったのでしょうか、重複している可能性は残念です。

答えて

5

あなたは

&Timer::ThreadFunc 
+0

はありがとうスコープを指定する必要があります!それは動作します。 – Dragon

関連する問題