有没有办法让'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