pthread_create()中带有变量参数的函数?

时间:2017-03-09 18:46:41

标签: c pthreads

如何使用变量参数(n个参数)实现一个函数,如:void * thre(int,...);,在pthread_create内部(& thr,NULL,thre,???) 提前谢谢。

1 个答案:

答案 0 :(得分:1)

设置了线程处理函数的原型。它必须是void* (*)(void*)。即使使用强制转换,也无法传递接受其他内容的函数,因为这将导致未定义的行为。

但POSIX允许您使用单个void*参数,该参数足以传递任何内容的地址,因此不具有此限制。

因此,如果您想传递一些额外的参数,请将它们捆绑在一个结构中:

struct my_data {
  int    n;
  char   c;
  double d;
};

void *variable_argument_function (int first_arg, ...) {
  return NULL;
}

void* handler(void *vdata) {
  struct my_data *data = vdata;

  return variable_argument_function(data->n,
                                    data->c,
                                    data->d);
  //use data->n, data->c, data->d
}

int main(void) {
  struct my_data t_data = {
    .n = 1, .c = 'a', .d = 3.14
  };

  pthread_t t;
  if (pthread_create(&t, NULL, &handler, &t_data) == 0)
    pthread_join(t, NULL);

  return 0;
}