各位大神好
我現在用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;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/108240.html
標籤:網絡通信
上一篇:林軒田《機器學習基石》課程總結
