每次recv都创建了一个端口号解决方案

每次recv都创建了一个端口号
本帖最后由 VisualEleven 于 2014-04-28 11:56:09 编辑
这是写的上位机的接受线程,线程里面包含了recv函数和解码的部分,但是每次跟踪运行的时候发现到线程当中的recv函数中时就会连续出现好多端口号,我创建socket和连接都是放在初始化里的,我认为现在遇到的大部分问题这个是源头(1为ONTIMER代码包括线程。2为接收函数。3为端口增加的现象)
运行到这就出现一个端口
void CADtestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,NULL,0,NULL); //线程
 CloseHandle( hThread);

short uLeft, uMiddle, uRight,uLid,uRad ;
CString  strShow;
CString strModelTemp,strLidTemp,strRadTemp, strEnvTemp;
int i = 0;
extern short a,b,c,d,e;
uLeft=a;
uMiddle=b;
uRight=c;
uLid=d;
uRad=e;
// JGInt16 uRad;
strModelTemp.Format(_T("Left_Temp:%2d     \nMiddle_Temp:%2d     \nRight_Temp:%2d  \nLid_Temp:%2d   \nRad_Temp:%2d"), 
uLeft,uMiddle,uRight,uLid,uRad);

m_show.SetWindowText(strModelTemp);
CDialogEx::OnTimer(nIDEvent);
}

//////////////////////////这是我线程中的recv代码::recv(sockClient,m_cbRecvBuf, sizeof(m_cbRecvBuf), 0);每次运行到这就出现一个新端口  我创建socket和connect都是放在初始化里面的每次recv都创建了一个端口号解决方案
这是出现端口号增加的情况截图。
------解决方案--------------------
把启动线程的代码放到初始化代码里面去,不要放在OnTimer里面,除非你真的需要这么多线程。
------解决方案--------------------
你不能只创建一个线程吗?
------解决方案--------------------
void CADtestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,NULL,0,NULL); //线程
 CloseHandle( hThread);

short uLeft, uMiddle, uRight,uLid,uRad ;
CString  strShow;
CString strModelTemp,strLidTemp,strRadTemp, strEnvTemp;
int i = 0;
extern short a,b,c,d,e;
uLeft=a;
uMiddle=b;
uRight=c;
uLid=d;
uRad=e;
// JGInt16 uRad;
strModelTemp.Format(_T("Left_Temp:%2d     \nMiddle_Temp:%2d     \nRight_Temp:%2d  \nLid_Temp:%2d   \nRad_Temp:%2d"), 
uLeft,uMiddle,uRight,uLid,uRad);

m_show.SetWindowText(strModelTemp);
CDialogEx::OnTimer(nIDEvent);
}

定时器每个滴答就创建一个线程,当然就会很多对应的东西了