2014-12-01 20 views
1
int pthread_join(pthread_t thread, void **retval); 

的指針按照手冊頁在pthread_join應該使用指針的指針作爲參數傳遞給存儲返回value.I無法理解爲什麼它的設計,使得它way.Is足夠使用指針變量在那?使用指針的函數在pthread_join

+0

僅僅因爲你不明白它並不意味着它會起作用,如果你不遵循函數的規範。 – 2014-12-01 16:31:16

+0

它接收你從線程proc返回的指針(它有一個'void *'結果)。該值必須存儲在*某處*。 'pthread_join'結果將成爲候選者,但它被用來傳達函數成功/失敗結果。因此,一個外部參數誕生了。作爲C中的一個外部參數,它將目標作爲地址提供,因此也是指針指針。 – WhozCraig 2014-12-01 16:31:18

+0

它是這樣設計的,以便線程可以存儲一個void *在線程執行時不會消失的某個地方。 – 2014-12-01 16:32:11

回答

2

如果我已經清楚地理解您的查詢.. 你應該使用這樣的..

pthread_t a_thread; 
void *thread_result; 
pthread_join(a_thread, &thread_result); 
+0

缺少的是返回值*是* void *';它不需要指向任何東西,因爲它是一個不透明的指針。 – abligh 2014-12-01 17:48:03

1

傳遞給pthread_create起動程序返回Foobar類型的值。我不知道什麼是Foobar,但如果你想捕捉價值pthread_join,你必須在傳遞一個Foobar*

現在,當我看着pthread_create文檔,我看到Foobar實際上void*是。因此pthread_join應該接受void**