のメソッドを実行しています。一度作成したソートのアクティブオブジェクトを設計しようとしています。私がこれまで行ってきたことは、pthreadインスタンス変数を含むクラスを作成し、そのクラスのコンストラクタで、pthreadを途中で送るべきです。Pthreadインスタンスの変数は、クラス
pthread_create()は関数のパラメータを取るので、クラス実装ファイルでrun()関数を設定します。今のよう
、私の実行()関数は、それだけで実装ファイルに座って、クラスの一部ではありませんが、私はそれをコンパイルしようとしたとき、私はというエラーを取得:
"error: ‘run’ was not declared in this scope"
ここでは、関数run()が範囲外である理由を理解していますが、run()をプライベート関数としてアクティブオブジェクトクラスに追加するのは正しいでしょうか、またはこれらのオブジェクトが複数存在する場合、 ?ちょっと、それらのうちの1つだけをインスタンス化して問題を引き起こすでしょうか?
ここにコードがありますが、私はちょうどそれが重要だとは思わなかった。ここで、MyClass.cpp
class MyClass {
private:
pthread_t thread;
ObjectManager *queue;
int error;
// just added this, but the compiler still doesn't like it
void *run(void *arg);
public:
MyClass();
~MyClass();
void start();
}
MyClass.hpp
であり、ここで実装したものです:#include "MyClass.hpp"
void MyClass::start() {
if (queue == NULL)
return;
int status = pthread_create(&thread, NULL, run, (void *) queue);
if (status != 0) {
error = status;
return;
}
}
void *MyClass::run(void *arg) {
bool finished = false;
while (!finished) {
// blah blah blah
}
return NULL;
}
コードを表示するか、ヘルプを提供するのが非常に難しいでしょう – nos
OK、クラス関数として追加しようとしましたが、型の不一致のためにコンパイルされません。 void *(*)(void *)を探していて、void *(MyClass ::)(void *)を取得しています。 –
[pthread Function from a Class]の複製が可能です。(http://stackoverflow.com/questions/1151582/pthreadfunction-from-a-class) –