0
クラスメンバ関数をpthread_createに渡して、以下のエラーが発生しています。私はすでにstackoverflow上に非常に多くのクエリがあることを知っているとクラスメンバー関数の周りに静的ヘルパーを作成し、pthread_createの最後の引数としてpthreadと関数のコールバックでその静的関数を渡しているが、私の場合は、また、だから、私の問題は少し違っています。 メンバー関数の引数はどこに渡すべきですか?ご協力いただければ幸いです。引数を持つメンバ関数をC++のpthreadsに渡す
#include <stdio.h>
#include <pthread.h>
struct Point
{
int y;
int z;
};
class A
{
int x;
public:
int getX();
void setX(int val) {x = val;}
void* func(void* args)
{
Point p = *(Point *)args;
int y = p.y;
int z = p.z;
return (void *)(x + y + z);
}
void myFunc()
{
int y = 12;
int z = 2;
pthread_t tid;
Point p;
p.y = y;
p.z = z;
pthread_create(&tid, NULL, func, &p);
pthread_join(tid, NULL);
}
};
int main(int argc, char *argv[])
{
A a;
a.myFunc();
return 0;
}
エラー:
classThreads.c: In member function ‘void A::myFunc()’:
classThreads.c:40:42: error: cannot convert ‘A::func’ from type ‘void* (A::)(void*)’ to type ‘void* (*)(void*)’
pthread_create(&tid, NULL, func, &p);
問題は引数ではなく、メンバ関数のための 'this'ポインタです。 –
私は@JustinFinnertyを知っていますが、解決策も知っていますが、解決策は引数を持たないメンバ関数のためです。引数を持つメンバ関数の解決策が必要です。 –
pthread \ _create関数の '\ * void(MyClass :: \ *)(void \ *)をvoid \ *(\ *)(void \ *)に変換できません]というhttps://stackoverflow.com/question/12006097/can not-convert-voidmyclassvoid-to-voidvoid-in-pthread-create-fu) – VTT