C++ 将argv和argc传递给线程

C++ 将argv和argc传递给线程,c++,c,pthreads,parameter-passing,C++,C,Pthreads,Parameter Passing,我的程序接收来自用户的参数 int main(int argc, char *argv[]) 我在某个线程中有此函数(我无法更改此函数): 如您所见,我需要调用线程,在这个线程中,使用这些参数调用func。 我看到有一种方法可以使用struct向线程发送多个参数 结构应该是什么样子的?如何将这些参数复制到结构中 struct arg_holder { int argc; char ** argv; }; void * thread_caller(void * arg) {

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

int main(int argc, char *argv[])
我在某个线程中有此函数(我无法更改此函数):

如您所见,我需要调用线程,在这个线程中,使用这些参数调用
func
。 我看到有一种方法可以使用struct向线程发送多个参数

结构应该是什么样子的?如何将这些参数复制到结构中

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);

请注意,由于命令行参数的生命周期是提供给它们的进程(main)的生命周期,因此您可以将命令行参数传递给线程,而无需复制它们(即使用malloc创建包含它们的专用结构)

干杯


Guy.

struct Args{int argc;char*argv[];}?嗨!谢谢你的评论,但调用fuc:TCPserver时会出现错误。c:136:23:error:无效类型参数'->'(have'struct multiple_var')TCPserver.c:136:40:error:无效类型参数'->'(have'struct multiple_var'))
thread\u调用者的第一行应该是:
struct arg\u holder*arg\u struct=(struct arg\u holder*)arg
@davidlaport我故意将参数holder
struct
复制到堆栈中。这样我就可以直接释放动态内存并返回被调用函数的返回值。这允许对tailcall编译器进行优化。那么返回语句应该是
arg_struct.argc,arg_struct.argv
?(“.”而不是“->”)
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);