21

クラス内からスレッドを生成しようとしていますが、スレッドはクラス内の特定のメソッドを実行します。コードは次のようになります。

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)’

ここでの実際のバグが何であるかはわかりません。誰かがこれで私を助けることができますか?

ありがとう。

4

1 に答える 1

28

問題は、オブジェクトなしではメンバー関数を呼び出せないことです。this現在のオブジェクトが使用されるようにポインタを提供します。

thread t(&ThreadClass::myThread, this, 10);

任意のオブジェクトのインスタンスを使用できますThreadClassが、あなたの場合、それthisは正しいことのようです。

注: 後で実行できるように、作成されたスレッドへの参照が必要であることを忘れないでくださいjoin()

于 2012-12-15T01:31:24.273 に答える