- 締切済み
クラス内でのpthread_createに関して
C言語初心者です。 下記のようなソースにて、クラス内でのスレッドを行うことが目的です。 しかし、下記のpthread_createにてコンパイルエラーとなります。 キャストエラーのようなのですが、キャスト方法がわかりません。 初歩的な質問で、大変申し訳御座いませんが、ご教授頂けませんでしょうか? ################################################################ #include <stdio.h> #include <pthread.h> // Testクラス class Test{ private: // スレッド処理 void testThread() { printf("### THREAD START ###\n"); return; } public: // スレッド開始 void threadStart() { // スレッド生成戻り値 int status; // スレッド pthread_t thread; // スレッド生成 status = pthread_create( &thread, NULL, (void*(*)(void*))testThread, NULL ); // スレッド生成結果 if ( status != 0 ) { printf("ERR!! pthread_create NG\n"); } return; } }; // メイン実行 int main(int argc, char *argv[]) { // Testクラスオブジェクト Test test; printf("### TEST START ###\n"); test.threadStart(); printf("### TEST E N D ###\n"); return 0; } ################################################################ 宜しくお願い致します。 以上です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- rinkun
- ベストアンサー率44% (706/1571)
pthread_createの引数で指定するスレッド処理関数は関数ポインタでなければいけませんが、静的でないメンバ関数を関数ポインタにキャストすることはできません。 一般的には次のようにします。 静的メンバ関数あるいは単なる関数でスレッド処理関数を記述して、データ引数でクラスのポインタを渡します。スレッド処理関数ではこのポインタ(void*になっている)を元のクラスにキャストして目的の処理を呼び出します。