私は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がクラスの内部で呼び出されたときはそうではありません。それが私が見た唯一の違いで、なぜこのスレッドを作ったのでしょうか、重複している可能性は残念です。
はありがとうスコープを指定する必要があります!それは動作します。 – Dragon