gpt4 book ai didi

c - 将 argc 和 argv 传递给 c 中的线程

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:26 25 4
gpt4 key购买 nike

我正在尝试用 C 语言编写带有图形界面的聊天代码。一方面,我有一个用于聊天的客户端,另一方面,我有一个 GTK 应用程序来显示我的聊天。要同时运行它们,我将使用 pthread(接受其他建议)。

我的问题是我需要 argc 和 argv 才能使我的客户端正常工作。据我所见,pthread_create() 将一个要执行的函数作为参数,并且只有一个参数。我从其他主题中看到我可以使用数据结构来包含它们,但我似乎无法正确转换它们。这是我所拥有的:

typedef struct {
int *argc;
char ** argv;
} args_list;

void * simple_client(void * arg){
int argc = (int) arg->argc;
char * argv[] = (char *) arg->argv;
printf("in thread : %d / %s, %s \n", argc, argv[0], argv[1]);

return 0;
}

int main(int argc, char * argv[])
{
printf("int main : %d / %s, %s \n", argc, argv[0], argv[1]);
args_list * args = malloc(sizeof *args);
args-> argc = &argc;
args-> argv = &argv;

pthread_t thread1;

if (pthread_create(&thread1, NULL, simple_client, args)) {
perror("pthread_create");
return EXIT_FAILURE;
}
if (pthread_join(thread1, NULL)) {
perror("pthread_join");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

从这里,我得到:错误:从 int argc = (int) arg->argc; 请求成员“argc”不是结构或 union 的东西;与来自 char * argv[] = (char *) arg->argv;

的 argv 相同

什么会导致这些错误?您认为这是使用 GTK 图形用户界面实现在线聊天的好方法吗?

提前致谢

最佳答案

这样定义struct:

typedef struct tARGS
{
int argc;
char **argv;
} ARGS;

然后,在 main 中:

ARGS args;
args.argc = argc;
args.argv = argv;

从技术上讲,argc 并不是真正需要的,因为下面的代码将处理 args 中的每个参数(argv[argc] 是一个保证C 标准的空指针):

ARGS args = *(ARGS *)arg;
while(*args.argv)
{
puts(*args.argv);
args.argv++;
}

关于c - 将 argc 和 argv 传递给 c 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54876579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com