我目前正在使用select()
處理多個客戶端的多客戶端服務器上工作。但是,當客戶端發送需要大量計算的消息時,我必須使用pthread_create()
創建一個新線程,以便我的服務器可以保持對來自客戶端的其他消息的響應。一旦計算完成後,我需要能夠將消息返回給客戶端。但我不知道我如何知道該線程是否已完成,以及如何獲得最終結果。很明顯,我無法使用pthread_join()
,因爲這會在運行新線程時阻塞我的服務器程序。那麼C是否提供了一個函數,可以用來獲取該子線程的最終結果?我想避免使用全局變量。C - 使用pthread並等待返回值
0
A
回答
1
你可以只檢查是否線程從主線程加入它(這將是非阻塞)之前完成
你應該得到怎樣從這裏做到這一點:How do you query a pthread to see if it is still running?
否則你可能只需從子線程發回答案,就可以傳遞連接信息作爲線程函數的參數。
1
如果您希望子線程在完成處理時喚醒正在等待select()
的線程,則可以使用pipe()
來創建管道。調用select()
的線程將管道的讀取端添加到其文件描述符集中,並且子線程在完成其工作時寫入管道的寫入端。
如果結果不是太大,你甚至可以通過管道發送結果。
相關問題
- 1. Javascript並沒有等待返回值
- 2. 同步返回值並等待飛鏢
- 3. 等待函數返回值
- 4. 等待返回值NodeJS
- 5. C#.NET等待所有線程完成並獲得返回值
- 6. 檢測C中的等待線程Pthread
- 7. 返回類型Pthread使用C++創建
- 8. 等待異步回調返回值
- 9. Pthread和等待條件
- 10. pthread播放然後等待?
- 11. pthread返回值到數組
- 12. 使pthread等待另一個數據
- 13. JavaScript似乎沒有等待返回值
- 14. c#異步方法和返回等待
- 15. C#.NET異步等待返回類型
- 16. C#等待任務組返回對象
- 17. 等待一個字符串返回值
- 18. 等待方法的返回值
- 19. 「等待」ReadyState在返回值前爲4
- 20. Ç - 等待,得到的返回值
- 21. jQuery的等待事件的返回值
- 22. 等待連接時server.accept()的返回值
- 23. 在返回值之前等待iPhone
- 24. 如何等待$ .getJson的返回值
- 25. Ruby(鞋子) - 等待函數返回值
- 26. 返回值前等待承諾
- 27. simplemodal確認實例等待返回值
- 28. 我的pthread會等待還是等待主線程?
- 29. 使DialogBox等待用戶操作並返回布爾GWT
- 30. pthread返回251
'那麼C是否提供了一個函數,可以用來獲取該子線程的最終結果?'是的,選擇()。 – ThingyWotsit
或者,通過相關的fd線程並直接回復。 – ThingyWotsit
@ThingyWotsit我認爲select()只適用於文件描述符: –