因为在三个界面都需要接收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;
}

解决方案 »

  1.   

    判断一下是否为自己的socket等,然后再决定显示
    或者统一一个线程接收,然后再分类转发给不同的界面
      

  2.   

    这样肯定不行的
    接收缓冲肯定只能接收一次
    我觉得可以通过判断CreateThread的返回句柄来控制只开一个线程
    然后向三个界面来发消息
      

  3.   

    用sendmessage自定义消息可以。
      

  4.   

    不要用多个线程从一个socket接收数据。怎么会有这种需求?
      

  5.   

    是不是这样的?
    消息是“1234567890”
    结果界面1收到“12  5  8”
        界面2收到“  34    9”
        界面3收到“      67  0”如果是的话,建议这么改。
    1、使用一个独立的线程接受数据。并保存在一个公共的BUFF中。
    2、每个界面使用一个的线程读取公共BUFF。
    3、在读取时同步线程。
      

  6.   

    "三个界面里面都加了下面一个线程进行接收"  ->> 也就是同一个socket了.
    其它的我就看不出什么来了.
      

  7.   

    在接受的 bug的头里加以个验证字符,已判断是那个线程接受的。
      

  8.   

    弄个队列吧。把socket接收到的都放入队列中。然后再慢慢发送给各个界面。管他是谁的。先存起来。反正socket是有队列机制的。然后只要是某一个,等到信息都全了。再运行。如果缺少啥。就等着。看这个想法行不?
      

  9.   

    楼上的都很对啊,
    一个线程接收就可以了,把接收socket的返回值sendmessage给3个界面即可。
      

  10.   

    用一个线程接受数据,也就是一个socket,对多个界面,只要进行判断,分别派送就行了,不过楼主的问题可以再描述详细点