2017-05-18 96 views
0

我目前正在使用select()處理多個客戶端的多客戶端服務器上工作。但是,當客戶端發送需要大量計算的消息時,我必須使用pthread_create()創建一個新線程,以便我的服務器可以保持對來自客戶端的其他消息的響應。一旦計算完成後,我需要能夠將消息返回給客戶端。但我不知道我如何知道該線程是否已完成,以及如何獲得最終結果。很明顯,我無法使用pthread_join(),因爲這會在運行新線程時阻塞我的服務器程序。那麼C是否提供了一個函數,可以用來獲取該子線程的最終結果?我想避免使用全局變量。C - 使用pthread並等待返回值

+1

'那麼C是否提供了一個函數,可以用來獲取該子線程的最終結果?'是的,選擇()。 – ThingyWotsit

+0

或者,通過相關的fd線程並直接回復。 – ThingyWotsit

+0

@ThingyWotsit我認爲select()只適用於文件描述符: –

回答

1

如果您希望子線程在完成處理時喚醒正在等待select()的線程,則可以使用pipe()來創建管道。調用select()的線程將管道的讀取端添加到其文件描述符集中,並且子線程在完成其工作時寫入管道的寫入端。

如果結果不是太大,你甚至可以通過管道發送結果。