2014-03-28 2 views
0

을에 앞서 pthread_create와 같이 함수 이름을 전달하는패스 기능 이름은 내가는 pthread_create 함수를 사용하여 pthread와를 만들려면 C

char *function_name="get_time"; 

int rc = pthread_create(&thread_arr[threadNum], NULL, 
    *function_name, (void *) output_cur_node->data); 

또한이 입력하지 않는 것 (void*)&function_name

를 사용하여 시도 기능 get_time(). 내가

int rc = pthread_create(&thread_arr[threadNum], NULL, 
    get_time, (void *) output_cur_node->data); 

이하로 사용하는 경우

대신, 그것을 잘 작동합니다.

여기서 잘못된 점을 알려주십시오.

답변

3

당신은 기능의 요지를 통과해야하지만, 문자열의 주소를 전달하려고하는

+0

어떻게 해결할 수 있습니까? 기본적으로 함수 이름을 미리 알지 못합니다. 나머지 코드는 xml을 읽고 거기에서 함수 이름을 문자열 형식으로 가져옵니다. – user1429246

+1

주소 매핑에 함수 이름을 유지해야합니다. 자세한 내용은 http://stackoverflow.com/questions/15349761/get-called-function-name-as-string을 참조하십시오. – Nikole

0

다음과 같이는 pthread_create의 프로토 타입은 다음과 같습니다

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
        void *(*start_routine) (void *), void *arg); 

3 인수가 함수 포인터의되어야하는 형인

공극 * (* start_routine) (공극 *)

그래서이

char *function_name="get_time"; 
(void*)&function_name 

를 수행하여 인수를 전달하려고 할 때마다 효과적으로 무효 *하지 않습니다 종류가 위의 유형과 일치하는 것을 의미한다. 따라서 컴파일 시간 오류가보고됩니다.