どのように複数の値をCのスレッドへの引数として渡すのですか?

Cでは、スレッドに複数の引数を渡す方法はありますか?

通常、私はそれを、

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


void * dosomething(void *connfd)
{

 //Doing something      

}

上記の例では、connfdの値をスレッド 'th'に渡しています。

それは私にとって大いに役立つように、複数の値を渡す方法はありますか?

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

2

3 答え

ヒープ上の struct の中にいくつかの値をパックして( malloc それを前に埋めて)、 pthread_create コード>構造体

7
追加された
ありがとうBasile Starynkevitch
追加された 著者 Dinesh,
#include  
#include 
#include  

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);
 } 
2
追加された

引数として配列を渡すことについては、もちろんそれを行うことができます。配列を次のように宣言すると、

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

a is like a label to the starting address of the array. Thus a represents a pointer. *a is equal to a[0] and *(a+1) is equal to a[1]. So you can pass the array to the thread as below:

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

スレッド内で a int * にキャストして配列として使用できます。

1
追加された
ありがとうcuriouscat
追加された 著者 Dinesh,