2011-12-19 3 views
2

C에서 스레드에 둘 이상의 인수를 전달하는 방법은 무엇입니까?C에서 스레드에 대한 인수로 둘 이상의 값을 전달하는 방법은 무엇입니까?

일반적으로, 나는 위의 예에서

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


void * dosomething(void *connfd) 
{ 

    // Doing something  

} 

, 나는 단지 스레드 '일'에 connfd 값을 전달하고, 방법 등에서 그것을 할.

나에게 유용 할 수 있도록 둘 이상의 값을 전달할 방법이 있습니까?

한 가지 더, 스레드를 인수로 배열을 전달할 수 있습니까?

답변

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); 
} 
관련 문제