2011-05-01 103 views
1

我想通过传递到主线程的任何参数传递给我用“pthread_create”创建的“子线程”。如何将char * argv []传递给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_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]”等的主题?

回答

5

argvmainchar**,不是char*,所以这就是你应该threadMainLoop转换回。

+0

哎呀 - 没关系。你是对的。我读得不够深入。 – 2011-05-01 18:17:30

+0

您好,感谢您的反馈....非常感谢。我对C来说很新,你能告诉我如何在“threadMainLoop”中使用char **转换回来吗? – 2011-05-02 06:32:08

+0

您好,根据下面的GNU教程,argv是一个char * argv []?这就是为什么我这样使用它.....我错了吗? http://www.crasseux.com/books/ctutorial/argc-and-argv.html – 2011-05-02 06:34:28

1

这个工作现在...感谢史蒂夫在写方向推.....

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

我在一段代码中使用了你的答案,我发现了一个很大的错误。您必须复制argv,并且不能直接使用argv。 Argv是一个自动变量。在您的回调中使用它之前,Argv可能会被销毁。只需在threadMainLoop的第一行添加一个sleep(2),你就会发现它不再工作了! – ArthurLambert 2014-04-02 12:34:35

相关问题