2011-05-01 102 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

相關問題