如何将多个值作为参数传递给C中的线程?
在C中,我如何将多个参数传递给线程?
通常情况下,我是这样做的,
pthread_create(&th,NULL,dosomething,(void*)connfd); void * dosomething(void *connfd) { // Doing something }
在上面的例子中,我只将connfd值传递给线程’th’。
有没有办法传递多个值,以便它对我有用?
还有一件事,我们可以将数组作为参数传递给线程吗?
将几个值打包在堆上的struct
(所以malloc
并在之前填充它),然后使用指向该struct
的指针调用pthread_create
。
#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); }
关于将数组作为参数传递,当然可以这样做。 如果将数组声明为,
int a[3] = {1,2,2};
a
就像是数组起始地址的标签。 因此, a
代表指针。 *a
等于a[0]
且*(a+1)
等于a[1]
。 所以你可以将数组传递给线程,如下所示:
pthread_create(&th,NULL,dosomething,(void *)a);
在线程内部,您可以将a
回int *
并用作数组。