VC tcp server 多线程编程问题

CCATWYJ 2017-11-20 04:01:15
各位大神好

我现在用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;
}

}

...全文
179 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧