【技術的な問題】C++マルチスレッドpthread_create error: invalid use of non-static member function
問題は次のとおりです.
まずpthread_を簡単に説明しますcreateという関数の各パラメータ:param 1:スレッド識別子を指すポインタ.param 2:スレッドプロパティを設定します.param 3:スレッド実行関数の開始アドレス.param 4:関数を実行するパラメータ.
エラーは往々にして3番目のパラメータであり、エラーの原因は私たちがこのパラメータを静的関数に設定することを要求しているが、ここで問題があり、この関数は私たちが所属するクラスの非静的メンバー変数にアクセスする必要がある可能性があり、静的関数に設定すると静的変数にアクセスするしかない.以下の例ではコンパイルできません
どうすればいいのでしょうか.静的関数をもう一つ書いて、上のAddOneを入れることができます.この場合、AddOne関数を修飾するためにstaticは必要ありません.
pthread_の使用createの使用はthisポインタをパラメータとして入力するだけでいいです.以下のようにします.
これにより、AddOneがクラス内の他の非静的メンバー変数にアクセスし、エラーを報告しないことが保証されます.
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がクラス内の他の非静的メンバー変数にアクセスし、エラーを報告しないことが保証されます.