1

n 個のスレッドを作成したい。次に、それぞれに構造体を渡して、その構造体にデータを入力します。スレッドが終了したか、終了シグナルで中断されたかを追跡する bool など。

n = 5; // For testing.

pthread_t threads[n];
for(i=0; i<n; i++)
   pthread_create(&threads[i], &thread_structs[i], &functionX);

thread_structs が malloc されているとします。

Notice 関数内にfunctionX()はパラメーターがありません。構造体のパラメータを作成する必要がありますか? または、構造体を渡している場所は大丈夫ですか?

関数に渡したばかりの構造体を指すにはどうすればよいですか?

4

2 に答える 2

5

それは pthread_create の使い方ではありません:

http://man7.org/linux/man-pages/man3/pthread_create.3.html

   int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

3 番目の引数はルーチンで、4 番目はルーチンに転送される引数です。ルーチンは次のようになります。

void* functionX(void* voidArg)
{
    thread_struct* arg = (thread_struct*)voidArg;
    ...

pthread 呼び出しは次のようになります。

pthread_create(&threads[i], NULL, functionX, &thread_structs[i]);

(2 番目の引数として指定する pthread_attr_t がない場合)。

于 2013-11-03T08:43:50.180 に答える
2

宣言するfunctionX

void* function functionX(void* data) {
}

data次に、ポインターの型が何であれキャストし、好きなように&thread_structs[i]使用します。

于 2013-11-03T08:42:23.190 に答える