繁体   English   中英

将WaitForMultipleObjects()与ACE_SOCK_Stream一起使用-仅在有数据时获取事件

[英]Using WaitForMultipleObjects() with ACE_SOCK_Stream - get event only when there's data

是否可以将WaitForMultipleObjects()与ACE_SOCK_Stream一起使用,并使其仅在有要读取的数据时才返回?

我试图遵循:

    // set some params
    DWORD handlesCount = 1;
    DWORD timeoutMs = 5 * 1000;
    HANDLE* handles = new HANDLE[handlesCount]; 
    handles[0] = sock_stream.get_handle();

    while (true) {
        int ret = WaitForMultipleObjects(handlesCount, handles, false, timeoutMs);
        std::cout << "Result: " << ret << std::endl;

但是WaitForMultipleObjects()立即返回套接字流索引,表明套接字流已就绪(在无穷循环中打印0)。

通过ACE_SOCK_Acceptor (ACE_SOCK_Acceptor-> accept())接受套接字。

如何让WaitForMultipleObjects()等待套接字读取数据?

套筒手柄不适用于WFMO。 您应使用WSAEventSelect将所需事件与在WFMO中注册的事件句柄相关联。

由于您也熟悉ACE,因此可以检查ace / WFMO_Reactor.cpp,register_handler()方法的源代码,以查看用例及其在WFMO中的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM