如何阻止_beginthreadex创建的线程挂起在win32中

时间:2015-01-16 11:03:46

标签: c++ multithreading winapi winsock

我正在尝试学习winsock,我正在尝试让服务器处理多个请求,并且遇到了这个答案: TCP Winsock: accept multiple connections/clients

一切都很好,现在我有一个看起来像这样的代码(我将跳过整个代码,并把我认为重要的,如果你认为你可以帮助但需要澄清,请不要犹豫告诉我)< / p>

void NetworkServer::acceptClientSocket()
{    
sockaddr * dummy = NULL;
while (ClientSocket = accept(ListenSocket, dummy, NULL)){
    if (ClientSocket == INVALID_SOCKET) {
           printf("accept failed with error: %d\n", WSAGetLastError());
           closesocket(ListenSocket);
           WSACleanup();
           exit(1);
        }
        unsigned threadID;
        hThread = (HANDLE)_beginthreadex(NULL, 0, &handleClientRequest, (void*)ClientSocket, 0, &threadID);
    }
    closesocket(ListenSocket);
}

看起来像这样的handleClientRequest函数:

unsigned __stdcall handleClientRequest(void* data)
{
SOCKET client_socket = (SOCKET)data;

DataReceiver dataReceiver(client_socket);

dataReceiver.receiveClientData();

return 1;
}

经过几个小时的调试后,我看到程序到达了返回,然后挂起。我知道_endthreadex后来被立即调用,但程序仍然挂起。数据接收器是一个根据调试器完美地完成工作的对象。

请帮忙。

0 个答案:

没有答案