本帖最后由 oyljerry 于 2013-03-25 10:46:02 编辑

解决方案 »

  1.   

    如果你有多个PLClientsocket,则可能会有多线程的问题,应该要在Insertdata里面加锁。
      

  2.   

    我只有一个PLClientsocket,请问应该怎么样加锁呢,能给个例子吗~
      

  3.   

    多线程加Lock,一个添加的时候,其他线程等待
      

  4.   

    做添加动作的线程,动作开始前Lock,做完后,Unlock
      

  5.   

    你是哪一端用了多线程了,这里看服务器应该只是用了异步的窗口消息网络模型而已,也是单线程的。如果真的是用多线程的,那可以在Insertdata(this);这里加个锁
      

  6.   

    TCP/IP数据收发都是根据SOCKET句柄来的,不同的连接SOCKET句柄不一样,互不干扰,对于客户端而言,只能连接一个服务器,所以SOCKET句柄也只会有一个,对于服务端来说,因为会有多个客户端连接上来,所以你要管理多个客户端的连接,每侦听到一个客户端连接上来,为该客户端创建一个线程处理与它的数据收发,楼主你所说的插入的list出现的乱序是指什么?你的目的是想要按顺序先收一个客户端的数据,然后再收另一个?那你怎么能保存客户端是按你想要的顺序发送呢?
    m_pdlg->Insertdata(this);的时候,可能其他客户端也会进来,所以你这里考虑要加个锁。
      

  7.   

    应为是客户端是多次发送的,我在服务器inserdata发现顺序会出现乱码,应该服务器在inserdata还没完的时候马上又一个inserdata在跑了
      

  8.   

    CRITICAL_SECTION CRITICAL_WRITEVAR;//定义
    InitializeCriticalSection( &CRITICAL_WRITEVAR);//初始化void Insertdata(XXX)
    {
       EnterCriticalSection(&CRITICAL_WRITEVAR);
       // 你的代码
       LeaveCriticalSection(&CRITICAL_WRITEVAR);
    }程序退出时
    DeleteCriticalSection( &CRITICAL_WRITEVAR);// 删除