「これはヤバかったな」という遅刻エピソード

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;
}
################################################################

宜しくお願い致します。
以上です。

A 回答 (1件)

pthread_createの引数で指定するスレッド処理関数は関数ポインタでなければいけませんが、静的でないメンバ関数を関数ポインタにキャストすることはできません。



一般的には次のようにします。
静的メンバ関数あるいは単なる関数でスレッド処理関数を記述して、データ引数でクラスのポインタを渡します。スレッド処理関数ではこのポインタ(void*になっている)を元のクラスにキャストして目的の処理を呼び出します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報