1

を作成し、pthreadこの新しいスレッドを処理する関数の引数として、このスレッドの ID を渡すことができます。

 pthread_t thread;
 pthread_create(&thread, NULL,
         someFunction, (void *) fd);
 // And now handle it with this
 void * someFunction(void *threadid) { }

しかし、そのスレッドIDの代わりにオブジェクトのインスタンスをそこに渡す方法もありますか? 例えば:

MyObject * o = new MyObject();
pthread_t thread;
       /*and now how to pass o as an paramether, 
        *to be able to work with it later in 
        *my void * someFunction(void *threadid) { } ? 
        */
4

1 に答える 1

3

複合オブジェクトを作成できます。

class MyWrapper
{
    public: void* threadId;
    public: MyObject* o;

    public: MyWrapper(void* threadId, MyObject* o)
    {
        this->threadId = threadId;
        this->o = o;
    }
};
...
pthread_create(&thread, NULL, someFunction, new MyWrapper(threadid, o));

そして機能:

void * someFunction(void *state)
{
     MyWrapper* wrapper = (MyWrapper*)state;
     ...
}
于 2013-06-10T22:40:39.740 に答える