因为在三个界面都需要接收socket的返回值,所以我在三个界面里面都加了下面一个线程进行接收。当三个界面都打开的时候,会出现接收三个线程随机接收到消息反馈的问题,怎么解决呢?UINT threadRecv_CheckStock(LPVOID lpParameter)
{
CCheckStock* pdlg = ((RECVPARAM_Checkstock*)lpParameter)->pdlg;
int s = 1;
char buff[100];
while((s != SOCKET_ERROR) && (theApp.select_dialog == 2))
{
//调用recv函数接收数据
s = recv(theApp.m_Socket[1].socketTmp,buff,100,0);
if (s != SOCKET_ERROR )
{
pdlg->Parse_Code(buff,1);
}
}
//发送断开命令
send(theApp.m_Socket[1].socketTmp,"连接断开",100,0);
theApp.m_Socket[1].sign = FALSE;
closesocket(theApp.m_Socket[1].socketTmp);
AfxEndThread(0);
delete lpParameter; //释放
return NULL;
}
{
CCheckStock* pdlg = ((RECVPARAM_Checkstock*)lpParameter)->pdlg;
int s = 1;
char buff[100];
while((s != SOCKET_ERROR) && (theApp.select_dialog == 2))
{
//调用recv函数接收数据
s = recv(theApp.m_Socket[1].socketTmp,buff,100,0);
if (s != SOCKET_ERROR )
{
pdlg->Parse_Code(buff,1);
}
}
//发送断开命令
send(theApp.m_Socket[1].socketTmp,"连接断开",100,0);
theApp.m_Socket[1].sign = FALSE;
closesocket(theApp.m_Socket[1].socketTmp);
AfxEndThread(0);
delete lpParameter; //释放
return NULL;
}
或者统一一个线程接收,然后再分类转发给不同的界面
接收缓冲肯定只能接收一次
我觉得可以通过判断CreateThread的返回句柄来控制只开一个线程
然后向三个界面来发消息
消息是“1234567890”
结果界面1收到“12 5 8”
界面2收到“ 34 9”
界面3收到“ 67 0”如果是的话,建议这么改。
1、使用一个独立的线程接受数据。并保存在一个公共的BUFF中。
2、每个界面使用一个的线程读取公共BUFF。
3、在读取时同步线程。
其它的我就看不出什么来了.
一个线程接收就可以了,把接收socket的返回值sendmessage给3个界面即可。