VC tcp server 多线程编程问题
各位大神好
我现在用VC 做一个TCP sever的 多链接程序,现在需要多链接可以实现,但是在关闭TCP server 在重新链接后,会发生错误
我重新调试跟踪,发现TCP server 关闭后, 建立的多线程还在继续运行,而且我没有办法正常关闭或者退出
下面建立 监听多线程的程序
UINT _ListenThread(LPVOID param)
{
pDlg = (CMYQQDlg*)param;
int ret = pDlg->m_Server.InitAndListen(pDlg->m_Port);
if(ret == 0)
{
::AfxMessageBox("ret == 0!");
pDlg->ResetListMsg(-1);
ReceiveThread_S = ::AfxBeginThread(_ReceiveThread_S,pDlg);
}
//不断侦听
WaitForSingleObject(pDlg->hPrepareEvent,0);
ListenThread = ::AfxBeginThread(_ListenThread,pDlg);
return 0;
}
void CMYQQDlg::OnListen()
{
// TODO: Add your control notification handler code here
ListenThread = ::AfxBeginThread(_ListenThread,this);
}
关闭程序,一执行不是关闭不了,就是崩溃
void CMYQQDlg::Close_TCP_Server()
{
// TODO: Add your control notification handler code here
// nCol = 0;
// nConnectClients = 0;
if(pDlg->m_Server.m_hSocket!=NULL)
{
closesocket(pDlg->m_Server.m_hSocket);// 关闭后,会产生多出 204,204.204.204 ip的bug
pDlg->m_Server.m_hSocket=NULL;
}
DWORD dwExitCode;
if(ReceiveThread_S != NULL)
{
GetExitCodeThread(_ReceiveThread_S, &dwExitCode );
::AfxEndThread( dwExitCode, TRUE ); // 用这个语句关闭后,程序崩溃,但是线程没有真正关闭
ReceiveThread_S = NULL;
}
SuspendThread(_ListenThread);
SuspendThread(_ReceiveThread_S);
if(ListenThread != NULL)
{
GetExitCodeThread(_ListenThread, &dwExitCode );
ExitThread( dwExitCode); // 用这个语句关闭后,程序崩溃,
ListenThread = NULL;
}
}