如何将char*argv[]传递给pthread_create?
我试图将传入主线程的任何参数传递给使用pthread_create创建的子线程如何将char*argv[]传递给pthread_create?,c,C,我试图将传入主线程的任何参数传递给使用pthread_create创建的子线程 void *threadMainLoop(void *arg){ char *arguments = (char*)arg; printf("arg 1 - %s\n", arguments[1]); } int main(int argc, char *argv[]){ printf("Start of program execution\n"); rc = pthread_c
void *threadMainLoop(void *arg){
char *arguments = (char*)arg;
printf("arg 1 - %s\n", arguments[1]);
}
int main(int argc, char *argv[]){
printf("Start of program execution\n");
rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
printf("Thread create rc: %i, %d\n", rc, outboundThread);
if(rc != 0){
printf("Thread creation failed\n");
exit(1);
}
pthread_join(outboundThread, NULL);
return 0;
}
上面的代码不起作用,您能告诉我如何在线程中访问ARGV数组,如ARGV[0]等吗?主ARGV是一个字符**,而不是一个字符*,因此您应该在threadMainLoop中将其转换回。主ARGV是一个字符**,而不是一个字符*,这就是您应该在ThreadMain循环中将其转换回的内容。现在可以工作了……感谢Steve在写入方向上的推动
void *threadMainLoop(void *arg){
char **arguments = (char**)arg;
printf("args[0] =%s\n", arguments[0]);
printf("args[1] =%s\n", arguments[1]);
}
int main(int argc, char *argv[]){
printf("Start of program execution\n");
rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
printf("Thread create rc: %i, %d\n", rc, outboundThread);
if(rc != 0){
printf("Thread creation failed\n");
exit(1);
}
pthread_join(outboundThread, NULL);
return 0;
}
现在可以了…感谢Steve在写方面的推动
void *threadMainLoop(void *arg){
char **arguments = (char**)arg;
printf("args[0] =%s\n", arguments[0]);
printf("args[1] =%s\n", arguments[1]);
}
int main(int argc, char *argv[]){
printf("Start of program execution\n");
rc = pthread_create(&outboundThread, NULL, threadMainLoop, (void *) argv);
printf("Thread create rc: %i, %d\n", rc, outboundThread);
if(rc != 0){
printf("Thread creation failed\n");
exit(1);
}
pthread_join(outboundThread, NULL);
return 0;
}
您好,谢谢您的反馈……非常感谢。我对C非常陌生,您能告诉我如何在ThreadMain循环中使用char**进行反求吗?您好,根据下面的GNU教程,argv是char*argv[]吗?这就是为什么我用这种方式…我错了吗?您好,谢谢您的反馈……非常感谢。我对C非常陌生,您能告诉我如何在ThreadMain循环中使用char**进行反求吗?您好,根据下面的GNU教程,argv是char*argv[]吗?这就是为什么我用这种方式…我错了吗?我在一段代码中使用了你的答案,我发现了一个很大的错误。您必须复制argv,并且不能直接使用argv。Argv是一个自动变量。Argv可以在回调中使用之前销毁。只需在threadMainLoop的第一行添加一个sleep2,您就会看到它不再工作了!我在一段代码中使用了你的答案,我发现了一个很大的错误。您必须复制argv,并且不能直接使用argv。Argv是一个自动变量。Argv可以在回调中使用之前销毁。只需在threadMainLoop的第一行添加一个sleep2,您就会看到它不再工作了!