将ARGV和ARGC传递到线程

Pass the argv and argc to thread

本文关键字:线程 ARGC ARGV      更新时间:2023-10-16

我的程序从用户接收参数

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

我在某个线程中具有此功能(我无法更改功能):

func(&argc, &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);

以为,提到,afaik,您可以将命令行参数传递给线程而无需复制它们(即 - 创建一个使用malloc的专用结构),因为事实是命令行论证的终生时间是它们提供给的过程(主要)的生命时间。

欢呼,

Guy。