0

pthreads を使った小さなテスト プログラムを C++ で書きたいと思っています。pthreads の経験はありませんが、これまで読んだところでは、pthreads は C の構造であるため問題があるということです。

私のコードは次のとおりです。

class A{
       public:
            int main();
            void* do_work();
            static void* helper_do_work(void*);
};

void * IMagFieldSvc::do_work(){
}

void* IMagFieldSvc::helper_do_work(void* context)
{
          return ((IMagFieldSvc*)context)->do_work();
}
int A::main(){
…
          pthread_create(&thread, &attr, &helper_do_work, &svc);
          pthread_join(thread, NULL);
}

ただし、次のようにコンパイルします。

g++ -pthread test.cxx

戻り値

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: 関数_start': (.text+0x20): undefined reference tomain で collect2: ld が 1 つの終了ステータスを返しました

追加してみました

extern "C" void* helper_do_work(void*);

これが何をしても、エラーは同じです

半泣き?

これについて別の質問を開く必要があるかどうかはわかりません:また、do_workでメンバー変数にアクセスして変更したいのですが、演習の全体的な目的は、メンバー変数にアクセスして変更し、__threadでスレッドローカルにする方法を見つけることでした。これらのメンバー変数は、独自のコンストラクターとデストラクターを持つ自己定義型です。なぜそれが違いを生むのかわかりませんが、明らかにそうです...

4

1 に答える 1

3

をメンバー関数にすることはmainできません。グローバル名前空間で定義する必要があります。

次のように定義します。

int main()
{
// ...
}
于 2013-02-22T12:50:11.343 に答える