有沒有辦法讓'select'等待讀取和寫入,同時也能夠添加新的文件描述符?最好在一個線程上?C++ select異步編程
回答
現在我知道你的場景是什麼(一個基於套接字的服務器可能想接受新的傳入連接),你知道你可以將你的監聽套接字的文件描述符追加到select
的列表中嗎?見例如http://www.lowtek.com/sockets/select.html。
(意譯例如:)
fd_set socks;
FD_ZERO(&socks);
// Add listener socket
listen(sock, n);
FD_SET(&socks, sock);
// Add existing socket connections
for (i = 0; i < num_existing_connections; i++)
{
FD_SET(&socks, connection[i]);
}
// Will break if any of the existing connections are active,
// or if a new connection appears.
select(..., &socks, ...);
該網站是非常有幫助的。謝謝! – Andrew 2011-04-11 20:54:51
據我所知,你可以在同一個線程中做,但不能在同一時間。在這樣的問題中,我通常在描述符列表中添加我的虛擬回送套接字,並且每當我必須在FD_LIST中添加一個新的套接字時,我只是向我的虛擬套接字發送一個字節,並打破了選擇循環。然後我可以更新FD_LIST,然後再次選擇繼續。
您還可以使用最後一個參數向'select'調用添加超時。 – 2011-04-11 20:11:43
當然可以。但在這種情況下,如果您在選擇中使用較長的時間間隔,則必須等到新的套接字添加到FD_LIST中。如果在select中使用非常短的時間間隔,或者您不需要立即添加套接字,那麼使用interval參數是不錯的選擇。 – Tayyab 2011-04-11 20:17:40
- 1. C#中的異步編程#
- 2. 任務異步c#編程
- 3. C++異步網絡編程
- 4. 異步編程
- 5. 5.0之前的c#異步編程沒有異步&等待?
- 6. ASP.NET - 異步編程
- 7. 異步編程JAVA
- 8. C#3.5中的異步編程
- 9. 使用C++異步並行編程async
- 10. 異步編程使用異步/等待
- 11. 並行編程異步編程
- 12. 使用異步編程捕捉異議
- 13. 異步黑盒編程
- 14. 蟒蛇異步Socket編程
- 15. jQuery異步編程模式?
- 16. 混淆異步編程
- 17. 不等待異步編程?
- 18. 異步編程問題
- 19. ThreadPool.QueueUserWorkItem和異步編程
- 20. 異步套接字編程
- 21. 異步編程APM vs EAP
- 22. Java的異步編程
- 23. JavaScript的異步編程
- 24. Windows 8 Javascript異步編程
- 25. 異步套接字編程
- 26. C#:有關套接字編程的問題(同步或異步)
- 27. 異步填充react-select
- 28. C#:異步例程執行
- 29. c#線程異步問題
- 30. SELECT是同步的還是異步的?
如果你只有一個線程,那麼誰是增加新的文件描述符? – 2011-04-11 20:06:48
@Oli:我想OP只是想取消'select'調用並在另一個調用'select'之前添加描述符。 – 2011-04-11 20:09:52
@Andre:但只有一個線程,*何時*他想要打破「選擇」?有一些外部刺激嗎? – 2011-04-11 20:11:22