2011-12-19 12 views
2

Cでは、スレッドに複数の引数を渡すにはどうすればよいですか?複数の値をCのスレッドの引数として渡す方法はありますか?

通常、私は、同様の方法で上記の例では

pthread_create(&th,NULL,dosomething,(void*)connfd); 


void * dosomething(void *connfd) 
{ 

    // Doing something  

} 

をそれを行う、私は唯一のスレッドに「目」をconnfd値を渡しています。

複数の値を渡す方法はありますか?そうすれば、私には大いに役立ちますか?

さらにもう1つ、スレッドに引数として配列を渡すことはできますか?

答えて

7

パックヒープ上struct内のいくつかの値(したがってmallocそれと前それを埋める)、そのstructへのポインタとpthread_createを呼び出します。

+0

ありがとうBasile Starynkevitch – Dinesh

1

配列を引数として渡すことについては、もちろん可能です。あなたのように配列を宣言した場合、

int a[3] = {1,2,2}; 

aは、配列の先頭アドレスにラベルのようなものです。したがって、aはポインタを表します。 *aa[0]に等しく、*(a+1)a[1]に等しい。だから、以下のようにスレッドに配列を渡すことができます。

pthread_create(&th,NULL,dosomething,(void *)a); 

スレッド内であなたが戻っint *からaをキャストし、配列として使用することができます。

+0

ありがとうcuriouscat – Dinesh

2
#include <stdio.h> 
#include <stdlib.h> 
#include <pthread.h> 

void *genSimpleCurList(void *pnum) { 
    void *retval; 

    int i,j; 

    j = 0; 

    // when ptread_create , how to pass a parameters such as integer arrary to pthread 

    while(j<10) { 
    i =*((int *)pnum)+j; 
    fprintf(stderr,"pthread creat with parameter is %d\n",i); 
    j++; 
    } 

    return(retval); 

} 

int main() { 

int i, *j; 
pthread_t idxtid; 
pthread_attr_t attr; 
pthread_attr_init (&attr); 
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); 

j = (int *) calloc (1024, sizeof (int)); 
    for (i = 0; i < 1024; i++) j[i] = i; 

    rcode = pthread_create (&idxtid, &attr, genSimpleCurList, (void *)j); 

    exit(0); 
} 
関連する問題