UINT #else DWORD #endif WINAPI CUdpCast::WorkerThreadProc(LPVOID pv) { TRACE("---------------> Client Worker Thread 0x%08X started <---------------\n", ::GetCurrentThreadId()); CUdpCast* pClient = (CUdpCast*)pv; HANDLE hEvents[] = {pClient->m_evSocket, pClient->m_evBuffer, pClient->m_evWorker}; pClient->m_rcBuffer.Malloc(pClient->m_dwMaxDatagramSize); while(pClient->HasStarted()) { DWORD retval = ::WSAWaitForMultipleEvents(3, hEvents, FALSE, WSA_INFINITE, FALSE); if(retval == WSA_WAIT_EVENT_0) { if(!pClient->ProcessNetworkEvent()) { if(pClient->HasStarted()) pClient->Stop(); break; } } else if(retval == WSA_WAIT_EVENT_0 + 1) { if(!pClient->SendData()) { if(pClient->HasStarted()) pClient->Stop(); break; } } else if(retval == WSA_WAIT_EVENT_0 + 2) break; else ASSERT(FALSE); } TRACE("---------------> Client Worker Thread 0x%08X stoped <---------------\n", ::GetCurrentThreadId()); return 0; }
UINT WINAPI CUdpCast::WorkerThreadProc(LPVOID pv) { TRACE("---------------> Client Worker Thread 0x%08X started <---------------\n", ::GetCurrentThreadId()); BOOL bCallStop = TRUE; CUdpCast* pClient = (CUdpCast*)pv; HANDLE hEvents[] = {pClient->m_evSocket, pClient->m_evBuffer, pClient->m_evWorker}; pClient->m_rcBuffer.Malloc(pClient->m_dwMaxDatagramSize); while(pClient->HasStarted()) { DWORD retval = ::WSAWaitForMultipleEvents(3, hEvents, FALSE, WSA_INFINITE, FALSE); if(retval == WSA_WAIT_EVENT_0) { if(!pClient->ProcessNetworkEvent()) break; } else if(retval == WSA_WAIT_EVENT_0 + 1) { if(!pClient->SendData()) break; } else if(retval == WSA_WAIT_EVENT_0 + 2) { bCallStop = FALSE; break; } else if(retval == WSA_WAIT_FAILED) { pClient->m_ccContext.Reset(TRUE, SO_UNKNOWN, ::WSAGetLastError()); break; } else VERIFY(FALSE); } pClient->OnWorkerThreadEnd(::GetCurrentThreadId()); if(bCallStop && pClient->HasStarted()) pClient->Stop(); TRACE("---------------> Client Worker Thread 0x%08X stoped <---------------\n", ::GetCurrentThreadId()); return 0; }