-1
A
回答
2
一旦select/poll/epoll成功返回,請僅通過調用recvfrom
來避免這種情況。
像@Remy勒博在評論中提到的,你可以上拉像下面的東西:
while(run_flag) {
if(check select/poll/epoll) {
recvfrom(..)
}
}
可以開始使用epoll與select這裏。互聯網上也有很多。
另一種方法是使用異步網絡操作而不是線程。
我也可能會推薦使用boost::asio,因爲這只是您所有的網絡資料。
2
使用「自管」的把戲。
使用管道(2)系統調用打開管道。坐在循環中使用select/poll/kqueue /從你關心的套接字和管道讀取任何內容。當你從你的套接字獲取數據時,照常處理它。
要停止線程,請關閉要停止處理的線程中管道的另一端。您將在管道上將其檢測爲EOF,然後您可以將其用作信號來停止線程處理實際套接字。
相關問題
- 1. 如何終止C++ 11中的線程?
- 2. 如何在Qt中終止線程C++
- 3. 如何在Linux中完全從線程中終止進程(C)
- 4. 如何終止從cin讀取?
- 5. 如何取消(不終止)boost線程?
- 6. 線程終止在C#
- 7. c程序從文件中讀取時終止
- 8. 如何在讀取流時正確終止Python3線程
- 9. 如何使用C#從UI中終止線程
- 10. 線程終止問題(C):最後線程不終止
- 11. 從另一個線程終止C++中的線程
- 12. 如何終止performSelectorInBackground:線程?
- 13. 如何終止線程
- 14. 從lisp的socket-stream讀取線
- 15. 線程中斷未終止輸入流讀取阻塞調用
- 16. 終止線程
- 17. 終止線程
- 18. 父進程在C#中終止時如何終止子進程
- 19. Java socket從C#讀取字節#
- 20. 如何在Python中終止線程
- 21. Java線程終止
- 22. 通過Socket c讀取xml#
- 23. 終止線程池中的線程
- 24. Java - 終止線程
- 25. SlimDX - 終止線程
- 26. c#wpf線程沒有正確終止
- 27. 使用http獲取請求終止的線程終止
- 28. Android:如何從C++中的其他線程讀取資產
- 29. c#:如何在dispose()方法中終止後臺線程?
- 30. 如何在C#中終止一個線程?
設置一些「終止」布爾,從另一個線程關閉套接字。如果UDP就像TCP一樣,recvfrom()應該返回'early'並且出現錯誤。 – 2013-03-04 19:37:50
..或設置布爾和發送插座UDP報文的本地棧,所以使它返回。 – 2013-03-04 19:41:22