有没有给你反应堆样式的可扩展的Win32 API(如IOCP不喜欢选) 在插座操作? AFAIK IOCP允许你收到完成的作业的通知 像读取或写入数据(摄),但我在寻找操作的反应器风格:我 需要得到通知时,插座是可读或可写的(反应器)。

类似于epoll的,kqueue的,/dev/poll东西?

是否有这样的Win32 API?如果是这样在哪里可以找到一个手册上呢?

**澄清:**我需要select像API为插座,其是如可伸缩的作为IOCP,或我正在寻找一种方式在像操作反应器使用IOCP

均匀更多的澄清: IOCP允许你收到关于给定的操作完成的通知。例如:

WSARecv(buffer,...); // start reading
WSAWaitForMultipleEvents(...); // wait when read is done

所以我得到的商品通知之后操作完成 - 操作监考风格

我需要的是这样的事情:

WSARecv( NOTHING ); // start waiting for readability (not actual read)
WSAWaitForMultipleEvents(...); // wait until read would not block
// Now WSARecv would not block
WSARecv(buffer,...); // now actual non-blocking read

我怎样才能做到这一点?

有帮助吗?

解决方案 3

不可能。

我已经检查了确实有反应器样式的操作和使用IOCP Boost.Asio的来源。对于所有的反应器样式的操作与select单独的线程来代替IOCP。

其他提示

您想看看 WSAAsyncSelect API。它采用的是Windows消息队列的信号,一个手柄读读/写/什么的,所以它没有IOCP的并发好处,但它可以让你实现一个标准的反应器模式而无需限制数量手柄(像WSAWaitForMultipleEvents)。

我很困惑,是不是在线程块上的多个事件源等待反应堆模式?这将是选择(),其Windows支持。前摄器模式是其中存在每次呼叫一个回调,你可以通过ReadFileEx / WriteFileEx做。

你尝试过通过零nNumberOfBytesToRead到例如ReadFile的(socket_fd,..)?

也许这将有助于让“读就绪”事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top