2011-12-19 68 views
2

在C中,如何將多個參數傳遞給線程?如何將多個值作爲參數傳遞給C中的線程?

通常情況下,我做的方式一樣,

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


void * dosomething(void *connfd) 
{ 

    // Doing something  

} 

在上面的例子中,我傳遞connfd值只給線程「日」。

是否有任何方法可以傳遞多個值,以便對我有用?

還有一件事,我們可以將一個數組作爲參數傳遞給線程嗎?

回答

7

包在堆上一個struct內的幾個值(因此malloc它和前填充),然後調用pthread_create用一個指向struct

+0

謝謝巴西爾Starynkevitch – Dinesh 2011-12-19 10:02:04

1

關於傳遞一個數組作爲參數,當然你可以做到這一點。如果聲明數組作爲,

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

a就像一個標籤數組的起始地址。因此a代表一個指針。 *a等於a[0]*(a+1)等於a[1]。所以,你可以在陣列傳遞給線程如下:

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

你可以投a回到一個int *並作爲數組使用線程內。

+0

謝謝curiouscat – Dinesh 2011-12-19 10:01:45

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); 
} 
相關問題