在主线程中调用accept(sock)后,启动一新ui线程,想要在该线程中处理FD_READ/FD_WRITE等消息,不知该如何处理,请高手指教!
[email protected]

解决方案 »

  1.   

    在另一个线程里进行断口事件扫描,简单代码如下
    dwResult = WSAWaitForMultipleEvents(g_Events, g_SockEventList, FALSE, WAIT_LOCK_MAX_TIME - 5000, FALSE);
    if (dwResult == WSA_WAIT_FAILED)
    {
    iResult = WSAGetLastError();
    sprintf(strMsg, "Error number := %d", iResult);
    continue;
    }
    iResult = WSAEnumNetworkEvents(g_SocketMsgList[dwResult - WSA_WAIT_EVENT_0].Socket, g_SockEventList[dwResult - WSA_WAIT_EVENT_0], &dwNetworkEvent);
    if (iResult != 0)
    {
    iResult = WSAGetLastError();
    continue;
    }
    if (dwNetworkEvent.lNetworkEvents & FD_READ)
    {
    if (dwNetworkEvent.iErrorCode[FD_READ_BIT] != 0)
    {
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    g_SocketMsgList[dwResult - WSA_WAIT_EVENT_0].Begin = 0;
    回调函数();
    continue;
    }
    if (dwNetworkEvent.lNetworkEvents & FD_ACCEPT)
    {
    if (dwNetworkEvent.iErrorCode[FD_ACCEPT_BIT] != 0)
    {
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    回调函数();
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    if (dwNetworkEvent.lNetworkEvents & FD_CONNECT)
    {
    if (dwNetworkEvent.iErrorCode[FD_CONNECT_BIT] != 0)
    {
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    回调函数();
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    if (dwNetworkEvent.lNetworkEvents & FD_CLOSE)
    {
    if (dwNetworkEvent.iErrorCode[FD_CLOSE_BIT] != 0)
    {
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    回调函数(0);
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    if (dwNetworkEvent.lNetworkEvents & FD_WRITE)
    {
    if (dwNetworkEvent.iErrorCode[FD_WRITE_BIT] != 0)
    {
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    回调函数(0);
    bResult = WSAResetEvent(g_SockEventList[dwResult - WSA_WAIT_EVENT_0]);
    continue;
    }
    }