是否可以将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-&gt; accept())接受套接字。
如何使WaitForMultipleObjects()等到套接字有数据要读取?
答案 0 :(得分:2)
套接字句柄不适合在WFMO中使用。您应该使用WSAEventSelect将所需事件与在WFMO注册的事件句柄相关联。
由于您也熟悉ACE,因此可以查看ace / WFMO_Reactor.cpp,register_handler()方法的源代码,以查看用例以及它如何与WFMO一起使用。