我想使用pthread_create函数创建一个pthread并将函数名称传递为
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);
它工作正常。
请告知此处有什么问题。
答案 0 :(得分:3)
你需要传递函数的地址,但是你试图传递一个字符串的地址
答案 1 :(得分:0)
pthread_create的原型如下:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
第三个参数必须是函数指针,其类型为
void *(* start_routine)(void *)
所以无论何时你试图通过这样做来传递论证
char *function_name="get_time";
(void*)&function_name
实际上意味着 void * 类型与上述类型不匹配。因此会报告编译时错误。