我的程序从用户通过的argv和argc个线程
int main(int argc, char *argv[])
接收参数和我有一些线程在这个函数(我不能改变的功能):
func (&argc, &argv);
为你可以看到,我需要调用线程,并在线程内调用这些参数的func。 我看到有一种方法来发送线程多个参数与结构。
但结构如何看起来像?以及如何将这些参数复制到结构?
谢谢!
我的程序从用户通过的argv和argc个线程
int main(int argc, char *argv[])
接收参数和我有一些线程在这个函数(我不能改变的功能):
func (&argc, &argv);
为你可以看到,我需要调用线程,并在线程内调用这些参数的func。 我看到有一种方法来发送线程多个参数与结构。
但结构如何看起来像?以及如何将这些参数复制到结构?
谢谢!
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);
嗨!谢谢ypou的评论,但它给我错误时调用fuc:TCPserver.c:136:23:错误:无效类型参数的' - >'(有'结构multiple_var') TCPserver.c:136:40:错误:无效类型参数 ' - >'(具有 '结构multiple_var') – user1673206
'thread_caller'应的第一行:'结构arg_holder * arg_struct =(结构arg_holder *)ARG;' –
@DavidLaPorte我抄参数有意识地将持有者'struct'放入栈中。这样我可以立即释放动态内存并返回被调用函数的返回值。这允许进行尾调用编译器优化。 –
想到一提的是,据我所知,你可以通过命令行参数来线程无需将其复制(即 - 创建一个专用的结构包含它们使用malloc) ,因为命令行参数的生命周期是它们提供给它的进程(main)的生存时间。
干杯,
盖伊。
'struct Args {int argc; char * argv []; };'? –