簡體   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