0
外部ラッパーを使用してpthreadによってメンバー関数を呼び出そうとしていますが、それは私のためにはうまくいかず、segフォルトが発生します。どうしてこれなの? はここに問題を表示する小さなテストプログラムです:pthreadを外部にラップしてメンバーfuncを呼び出す
#include <iostream>
#include <pthread.h>
class test {
public:
test();
~test();
void RunTh(void);
private:
pthread_t *pid;
};
void *Run_wrp(void *context);
void test::RunTh(void)
{
while(1);
}
test::test()
{
pthread_create(pid,NULL,&Run_wrp,this);
}
test::~test(){}
int main(void) {
test tmp;
std::cin.get();
}
void *Run_wrp(void *context)
{
((test*)context)->RunTh();
}
'pid'はポインタですが、実際の 'pthread_t'オブジェクトではありません。 '*'を削除してから、 'pthread_create()'の呼び出しで '&'を参照解除してみてください。 – sonicwave
また、 'Run_wrp'をクラスの静的メンバー関数にすると、外部ヘルパーに依存する代わりに、その内部にうまく収まるようにすることができます。 – sonicwave
@sonicwaveあなたが最初のコメントを答えに移したら、私はそれを受け入れます! – cerr