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;
}

}

...全文
112 回复 点赞 打赏 收藏 举报
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
相关推荐
发帖
通信技术
加入

4141

社区成员

通信技术相关讨论
申请成为版主
帖子事件
创建了帖子
2017-11-20 04:01
社区公告
暂无公告