将argv和argc传递给线程

时间:2014-01-31 15:03:51

标签: c++ c pthreads parameter-passing

我的程序接收来自用户的参数

int main(int argc, char *argv[])

我在某个线程中有这个函数(我无法更改函数):

func(&argc, &argv);

正如您所看到的,我需要调用线程,并在此线程内部使用这些参数调用func。 我看到有一种方法可以用struct发送线程多个参数。

结构如何看起来像?如何将这些参数复制到结构中?

2 个答案:

答案 0 :(得分:3)

struct arg_holder {
    int argc;
    char ** argv;
};

void * thread_caller(void * arg) {
    struct arg_holder arg_struct = *(struct arg_holder *)arg;
    free(arg);
    return func(arg_struct->argc, arg_struct->argv);
}
main中的

struct arg_holder * arg_struct = malloc(sizeof(*arg_struct));
arg_struct->argc = argc;
arg_struct->argv = argv;

pthread_create(&thread_id, NULL, thread_caller, arg_struct);

答案 1 :(得分:1)

考虑到AFAIK,您可以将命令行参数传递给线程而不复制它们(即 - 使用malloc创建一个包含它们的专用结构),因为命令行参数的生命周期是他们提供给他们的过程(主要)的生命时间。

干杯,

盖。