while (1)
{ GetExitCodeThread(handle,&m);//退出码
if (CutListenThread==1)//通过外部全局变量控制线程退出
{
AfxMessageBox("监听线程终止");
::ExitThread(m);

//break;
}

int len = sizeof(cli);
int err = select(0,&fdread,NULL,NULL,&tv);
if (err>0)
{

if (FD_ISSET(sListen,&fdread))
{

sAccept = accept(sListen,(struct sockaddr* )&cli,&len);

if (sAccept==INVALID_SOCKET)
{
int error5 = WSAGetLastError();
CString error5_str5;
error5_str5.Format("%d",error5);
AfxMessageBox("接受连接错误,错误代码:"+error5_str5);

return 1;

}
CreateThread(NULL,0,DataThread,(LPVOID)sAccept,0,NULL);
}
}

Sleep(100);
}

解决方案 »

  1.   

    DWORD m;//线程退出代码 timeval tv;
    tv.tv_sec=0;
    tv.tv_usec=0;
    fd_set fdread;
    FD_ZERO(&fdread);
    FD_SET(sListen,&fdread); while (1)
    { GetExitCodeThread(handle,&m);//退出码
    if (CutListenThread==1)//通过外部全局变量控制线程退出
    {
    AfxMessageBox("监听线程终止");
    ::ExitThread(m);

    //break;
    }

    int len = sizeof(cli);
    int err = select(0,&fdread,NULL,NULL,&tv);
    if (err>0)
    {

    if (FD_ISSET(sListen,&fdread))
    {

    sAccept = accept(sListen,(struct sockaddr* )&cli,&len);

    if (sAccept==INVALID_SOCKET)
    {
    int error5 = WSAGetLastError();
    CString error5_str5;
    error5_str5.Format("%d",error5);
    AfxMessageBox("接受连接错误,错误代码:"+error5_str5);

    return 1;

    }
    CreateThread(NULL,0,DataThread,(LPVOID)sAccept,0,NULL);
    }
    }
    else{ int error6 = WSAGetLastError();
    CString error6_str;
    error6_str.Format("%d",error6);
    AfxMessageBox("select错误:"+error6_str);
    return 1;
    }

    Sleep(100);
    }

    return 0;
    }