每次recv都创建了一个端口号解决方案
每次recv都创建了一个端口号
这是写的上位机的接受线程,线程里面包含了recv函数和解码的部分,但是每次跟踪运行的时候发现到线程当中的recv函数中时就会连续出现好多端口号,我创建socket和连接都是放在初始化里的,我认为现在遇到的大部分问题这个是源头(1为ONTIMER代码包括线程。2为接收函数。3为端口增加的现象)
运行到这就出现一个端口
//////////////////////////这是我线程中的recv代码::recv(sockClient,m_cbRecvBuf, sizeof(m_cbRecvBuf), 0);每次运行到这就出现一个新端口 我创建socket和connect都是放在初始化里面的
这是出现端口号增加的情况截图。
------解决方案--------------------
把启动线程的代码放到初始化代码里面去,不要放在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);
}
定时器每个滴答就创建一个线程,当然就会很多对应的东西了
这是写的上位机的接受线程,线程里面包含了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都是放在初始化里面的
这是出现端口号增加的情况截图。
------解决方案--------------------
把启动线程的代码放到初始化代码里面去,不要放在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);
}
定时器每个滴答就创建一个线程,当然就会很多对应的东西了