-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. 如何在Qt中終止線程C++
- 2. 如何在讀取流時正確終止Python3線程
- 3. 線程終止在C#
- 4. 線程終止問題(C):最後線程不終止
- 5. 從另一個線程終止C++中的線程
- 6. 從lisp的socket-stream讀取線
- 7. 如何終止線程
- 8. 如何終止performSelectorInBackground:線程?
- 9. 線程中斷未終止輸入流讀取阻塞調用
- 10. 終止線程
- 11. 父進程在C#中終止時如何終止子進程
- 12. Java - 終止線程
- 13. SlimDX - 終止線程
- 14. 使用http獲取請求終止的線程終止
- 15. c#wpf線程沒有正確終止
- 16. c#:如何在dispose()方法中終止後臺線程?
- 17. C#Socket編程中的線程管理
- 18. 如何在c中終止程序?
- 19. win32線程意外終止在activeX(C++)
- 20. 如何獲取終止的Java線程的中斷狀態?
- 21. 從Socket中讀取線條並將它們放入BlockingQueue中
- 22. 調用SIGINT時終止線程 - C
- 23. Java終止或終止線程
- 24. 如何檢查線程是否終止?
- 25. 如何終止一個std ::線程?
- 26. 如何立即終止Parallel.ForEach線程?
- 27. 如何終止一個線程?
- 28. 如何最好地終止python線程?
- 29. 如何從WiX中終止進程
- 30. asp.net中的線程何時終止?
設置一些「終止」布爾,從另一個線程關閉套接字。如果UDP就像TCP一樣,recvfrom()應該返回'early'並且出現錯誤。 – 2013-03-04 19:37:50
..或設置布爾和發送插座UDP報文的本地棧,所以使它返回。 – 2013-03-04 19:41:22