我的程序從用戶通過的argv和argc個線程
int main(int argc, char *argv[])
接收參數和我有一些線程在這個函數(我不能改變的功能):
func (&argc, &argv);
爲你可以看到,我需要調用線程,並在線程內調用這些參數的func。 我看到有一種方法來發送線程多個參數與結構。
但結構如何看起來像?以及如何將這些參數複製到結構?
謝謝!
我的程序從用戶通過的argv和argc個線程
int main(int argc, char *argv[])
接收參數和我有一些線程在這個函數(我不能改變的功能):
func (&argc, &argv);
爲你可以看到,我需要調用線程,並在線程內調用這些參數的func。 我看到有一種方法來發送線程多個參數與結構。
但結構如何看起來像?以及如何將這些參數複製到結構?
謝謝!
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);
嗨!謝謝ypou的評論,但它給我錯誤時調用fuc:TCPserver.c:136:23:錯誤:無效類型參數的' - >'(有'結構multiple_var') TCPserver.c:136:40:錯誤:無效類型參數 ' - >'(具有 '結構multiple_var') – user1673206
'thread_caller'應的第一行:'結構arg_holder * arg_struct =(結構arg_holder *)ARG;' –
@DavidLaPorte我抄參數有意識地將持有者'struct'放入棧中。這樣我可以立即釋放動態內存並返回被調用函數的返回值。這允許進行尾調用編譯器優化。 –
想到一提的是,據我所知,你可以通過命令行參數來線程無需將其複製(即 - 創建一個專用的結構包含它們使用malloc) ,因爲命令行參數的生命週期是它們提供給它的進程(main)的生存時間。
乾杯,
蓋伊。
'struct Args {int argc; char * argv []; };'? –