これで、pthread_createのドキュメントを見ています。私がやりたいことをどうやってやっているのか分かりません。pthread_createにパラメータと関数を渡す方法
pthread_tの構造体でobvが渡すpthread_createを呼び出すとします。しかし、私が渡す関数は、MyNode *へのポインタを受け取ります。どのように関数をパラメータとして渡し、その関数にパラメータとして "this"を渡すか。
//MyNode field and method in class file
pthread_t myTrd;
static void compute(MyNode* node);
////////////////////////////////////////////////////////////
//Actual code in header file below
static void MyNode::compute(*MyNode node){ //L61
//code
}
void MyNode::run(){ //run function in header file
pthread_create(&(this->thread),NULL,MyNode::compute, this);
}
結果:
myNode.cpp:61: error: 'static' may not be used when defining (as opposed to declaring) a static data member
myNode.cpp:61: error: 'int MyProjectGraph::MyNode::compute' is not a static member of 'class MyProjectGraph::MyNode'
myNode.cpp:61: error: expected primary-expression before 'node'
myNode.cpp:61: error: expected ',' or ';' before '{' token
myNode.cpp:134: error: expected `}' at end of input
この '静的な無効MYNODE ::コンピューティング(* MYNODEノード){'コンパイルされませんが、それをしませんか? –
@JonathanLeffler nope。 – Qubit
MCey([MCVE])が役に立つと思うことが分かるように、 'class MyNode'を十分に表示するのが最善です。エラーメッセージの最初の行には "クラス定義の中に' static void compute(...) 'を書きますが、定義に' static'を含めていません。あなたの 'compute'関数が何をしているのかを確かめるのは難しいです。あなたが 'pthread_t myTrd;'をなぜ表示するのかは明らかではありません。完全に使用されていないようです。 –