2014-01-31 49 views
3

我的程序從用戶通過的argv和argc個線程

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

接收參數和我有一些線程在這個函數(我不能改變的功能):

func (&argc, &argv); 

爲你可以看到,我需要調用線程,並在線程內調用這些參數的func。 我看到有一種方法來發送線程多個參數與結構。

但結構如何看起來像?以及如何將這些參數複製到結構?

謝謝!

+0

'struct Args {int argc; char * argv []; };'? –

回答

3
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); 
+0

嗨!謝謝ypou的評論,但它給我錯誤時調用fuc:TCPserver.c:136:23:錯誤:無效類型參數的' - >'(有'結構multiple_var') TCPserver.c:136:40:錯誤:無效類型參數 ' - >'(具有 '結構multiple_var') – user1673206

+0

'thread_caller'應的第一行:'結構arg_holder * arg_struct =(結構arg_holder *)ARG;' –

+0

@DavidLaPorte我抄參數有意識地將持有者'struct'放入棧中。這樣我可以立即釋放動態內存並返回被調用函數的返回值。這允許進行尾調用編譯器優化。 –

1

想到一提的是,據我所知,你可以通過命令行參數來線程無需將其複製(即 - 創建一個專用的結構包含它們使用malloc) ,因爲命令行參數的生命週期是它們提供給它的進程(main)的生存時間。

乾杯,

蓋伊。