2014-01-31 46 views
3

我的程序从用户通过的argv和argc个线程

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

接收参数和我有一些线程在这个函数(我不能改变的功能):

func (&argc, &argv); 

为你可以看到,我需要调用线程,并在线程内调用这些参数的func。 我看到有一种方法来发送线程多个参数与结构。

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

谢谢!

+0

'struct Args {int argc; char * argv []; };'? –

回答

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

嗨!谢谢ypou的评论,但它给我错误时调用fuc:TCPserver.c:136:23:错误:无效类型参数的' - >'(有'结构multiple_var') TCPserver.c:136:40:错误:无效类型参数 ' - >'(具有 '结构multiple_var') – user1673206

+0

'thread_caller'应的第一行:'结构arg_holder * arg_struct =(结构arg_holder *)ARG;' –

+0

@DavidLaPorte我抄参数有意识地将持有者'struct'放入栈中。这样我可以立即释放动态内存并返回被调用函数的返回值。这允许进行尾调用编译器优化。 –

1

想到一提的是,据我所知,你可以通过命令行参数来线程无需将其复制(即 - 创建一个专用的结构包含它们使用malloc) ,因为命令行参数的生命周期是它们提供给它的进程(main)的生存时间。

干杯,

盖伊。