2010-11-12 35 views
0

它是由我的口授我的例程必須有返回值,它需要返回。pthread返回例程

即:

int mySuperThread(void) 

我啓動線程和它做什麼,它需要做的。被問到的問題是如何不斷重新啓動線程一次又一次地完成它的工作,同時仍然能夠返回一個整數(通過線程的運行生成)。請注意,根據我的理解,我需要通過線程的int返回值使用「返回」調用。

對此提出建議?我試圖找出是否有一些標誌或functon,我缺少與pthreads相關的線程,當線程結束時它可以重新啓動。

回答

2

首先,如果你用pthreads調用上面的函數,你可能會遇到一些麻煩。傳遞給pthread_create的函數指針的簽名必須是void * functionname(void*),也就是說,它必須是一個函數,它只需要一個指向void參數的指針並返回一個指向void的指針。

幸運的是,void*可以轉換爲從int以相對較少的痛苦,所以你的函數的返回可以關注一下:

return (void*) 5; 

獲得該返回值是一個涉及多一點。在迴歸之後繼續進行討論,你是對的。你不能。你想要做的是加入與線程,它只是等待,直到線程返回。完成之後,您可以像以前那樣重新啓動線程。

pthread_t mythread; 
int result; 
while(1){ 
    pthread_create(&mythread, NULL, mySuperThread, NULL); 
    pthread_join(mythread, &result); 
    /* do something with result */ 
} 
+0

這就是我的想法。謝謝!我相信在給出的問題上有一些錯誤。有趣的是,即使是我用了不正確的方法簽名,它仍然接受它,並沒有問題。我正在使用Ubuntu – schone 2010-11-12 05:30:22