pthread_create如何傳遞兩個參數以上的參數

涉及多參數傳遞給線程的,都需要使用結構體將參數封裝後,將結構體指針傳給線程 定義一個結構體 
struct mypara 

    var para1;//參數1 
    var para2;//參數2 


將這個結構體指針,作爲void *形參的實際參數傳遞 
struct mypara pstru; 

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


函數中需要定義一個mypara類型的結構指針來引用這個參數 
void *thr_fn(void *arg) 

    mypara *pstru; 
    pstru = (struct mypara *) arg; 
    pstru->para1;//參數1 
    pstru->para2;//參數2 

}


    pthread_create函數接受的參數只有一個void *型的指針,這就意味着你只能通過結構體封裝超過一個以上的參數作爲一個整體傳遞。這是pthread_create函數的接口限定的,別人已經明確表明我只接受一個參數,你硬要塞給他兩個肯定會出錯了。所以通過結構體這種組合結構變通一下,同樣實現了只通過一個參數傳遞,但通過結構指針對結構數據成員的引用實現多參數的傳遞 這種用結構體封裝多參數的用法不僅僅用在pthread_create函數中,如果你自己設計的函數需要的參數很多>=5個以上,都可以考慮使用結構體封裝,這樣對外你的接口很簡潔清晰,你的函數的消費者使用起來也很方便,只需要對結構體各個成員賦值即可,避免了參數很多時漏傳、誤傳(參數串位)的問題 結構體內包含結構體完全沒有問題,很多應用都這麼使用


轉自:http://blog.sina.com.cn/s/blog_8af6bbd10100xnp6.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章