【技術的な問題】C++マルチスレッドpthread_create error: invalid use of non-static member function


問題は次のとおりです.
pthread_create error: invalid use of non-static member function

まずpthread_を簡単に説明しますcreateという関数の各パラメータ:param 1:スレッド識別子を指すポインタ.param 2:スレッドプロパティを設定します.param 3:スレッド実行関数の開始アドレス.param 4:関数を実行するパラメータ.
エラーは往々にして3番目のパラメータであり、エラーの原因は私たちがこのパラメータを静的関数に設定することを要求しているが、ここで問題があり、この関数は私たちが所属するクラスの非静的メンバー変数にアクセスする必要がある可能性があり、静的関数に設定すると静的変数にアクセスするしかない.以下の例ではコンパイルできません
/*      */
//StaticAddOne     HttpServer       
void* HttpServer::StaticAddOne(){
    this->nums ++;  //this          ,     
}

どうすればいいのでしょうか.静的関数をもう一つ書いて、上のAddOneを入れることができます.この場合、AddOne関数を修飾するためにstaticは必要ありません.
//Static_ExecAddOne     HttpServer       
void* HttpServer::Static_ExecAddOne(void* pThis)
{
	static_cast<HttpServer *>(pThis)->AddOne();
}

pthread_の使用createの使用はthisポインタをパラメータとして入力するだけでいいです.以下のようにします.
pthread_create(&thread_id, NULL, Static_ExecAddOne, (void*)this);

これにより、AddOneがクラス内の他の非静的メンバー変数にアクセスし、エラーを報告しないことが保証されます.