pthread create如何傳遞多個引數

2021-06-08 22:29:45 字數 1913 閱讀 7616

分類: c語言

2012-06-19 08:44

98人閱讀收藏 

舉報涉及多引數傳遞給執行緒的,都需要使用結構體將引數封裝後,將結構體指標傳給執行緒

定義乙個結構體

struct mypara

將這個結構體指標,作為void *形參的實際引數傳遞

struct mypara pstru;

pthread_create(&ntid, null, thr_fn,& (pstru));

函式中需要定義乙個mypara型別的結構指標來引用這個引數 

void *thr_fn(void *arg)

pthread_create函式接受的引數只有乙個void *型的指標,這就意味著你只能通過結構體封裝超過乙個以上的引數作為乙個整體傳遞。這是pthread_create函式的介面限定的,別人已經明確表明我只接受乙個引數,你硬要塞給他兩個肯定會出錯了。所以通過結構體這種組合結構變通一下,同樣實現了只通過乙個引數傳遞,但通過結構指針對結構資料成員的引用實現多引數的傳遞

這種用結構體封裝多引數的用法不僅僅用在pthread_create函式中,如果你自己設計的函式需要的引數很多〉=5個以上,都可以考慮使用結構體封裝,這樣對外你的介面很簡潔清晰,你的函式的消費者使用起來也很方便,只需要對結構體各個成員賦值即可,避免了引數很多時漏傳、誤傳(引數串位)的問題

結構體內包含結構體完全沒有問題,很多應用都這麼使用

舉例如下:

#include

#include

#include

#include

#include

typedef

void

* (*fun)(

void

*);  

static

pthread_mutex_t mutex = pthread_mutex_initializer;  

static

pthread_cond_t recv_over = pthread_cond_initializer;  

static

pthread_cond_t decode_over = pthread_cond_initializer;  

static

pthread_cond_t play_over = pthread_cond_initializer;  

void

* receive(

void

*);  

void

* decode(

void

*);  

void

* play(

void

*);  

pthread_t tdec, tplay, trecv;  

struct

mypara   

;  int

main(

intargc, 

char

** argv)  

void

* receive(

void

* arg)  

printf("end receive\n"

);  

pthread_exit(0);  

}  void

* decode(

void

* arg)  

printf("end decode\n"

);  

pthread_exit(0);  

}  void

* play(

void

* arg)  

pthread_mutex_unlock(&mutex);  

printf("end play\n"

);  

pthread_exit(0);  

}  

pthread create如何傳遞多個引數

涉及多引數傳遞給執行緒的,都需要使用結構體將引數封裝後,將結構體指標傳給執行緒 定義乙個結構體 struct mypara 將這個結構體指標,作為void 形參的實際引數傳遞 struct mypara pstru pthread create ntid,null,thr fn,pstru 函式中需...

pthread create 函式用法

天開始學習linux下用c開發多執行緒程式,linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void s...

pthread create函式詳解

pthread create是unix環境建立執行緒函式 include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict a...