客户端多次发数据,服务器接数据后操作出现多线程问题 本帖最后由 oyljerry 于 2013-03-25 10:46:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你有多个PLClientsocket,则可能会有多线程的问题,应该要在Insertdata里面加锁。 我只有一个PLClientsocket,请问应该怎么样加锁呢,能给个例子吗~ 多线程加Lock,一个添加的时候,其他线程等待 做添加动作的线程,动作开始前Lock,做完后,Unlock 你是哪一端用了多线程了,这里看服务器应该只是用了异步的窗口消息网络模型而已,也是单线程的。如果真的是用多线程的,那可以在Insertdata(this);这里加个锁 TCP/IP数据收发都是根据SOCKET句柄来的,不同的连接SOCKET句柄不一样,互不干扰,对于客户端而言,只能连接一个服务器,所以SOCKET句柄也只会有一个,对于服务端来说,因为会有多个客户端连接上来,所以你要管理多个客户端的连接,每侦听到一个客户端连接上来,为该客户端创建一个线程处理与它的数据收发,楼主你所说的插入的list出现的乱序是指什么?你的目的是想要按顺序先收一个客户端的数据,然后再收另一个?那你怎么能保存客户端是按你想要的顺序发送呢?m_pdlg->Insertdata(this);的时候,可能其他客户端也会进来,所以你这里考虑要加个锁。 应为是客户端是多次发送的,我在服务器inserdata发现顺序会出现乱码,应该服务器在inserdata还没完的时候马上又一个inserdata在跑了 CRITICAL_SECTION CRITICAL_WRITEVAR;//定义InitializeCriticalSection( &CRITICAL_WRITEVAR);//初始化void Insertdata(XXX){ EnterCriticalSection(&CRITICAL_WRITEVAR); // 你的代码 LeaveCriticalSection(&CRITICAL_WRITEVAR);}程序退出时DeleteCriticalSection( &CRITICAL_WRITEVAR);// 删除 帧率在解码中设置还是在编码时设置? 负载分担的可靠性系统仿真 请教如何构造网络包 高分求解(NT相关) 请问怎么抛事件? SetFocus怎么不管用啊? 最简单的问题,跟贴很容易得分的哦~~ 急需帮助!!!火急 会Delphi和VC的朋友们帮我一把!! 一个简单的问题!求解 :) 求助一个问题,请朋友们支招 怎么把Combo box里的数据在ListCtrl中显示啊?
m_pdlg->Insertdata(this);的时候,可能其他客户端也会进来,所以你这里考虑要加个锁。
InitializeCriticalSection( &CRITICAL_WRITEVAR);//初始化void Insertdata(XXX)
{
EnterCriticalSection(&CRITICAL_WRITEVAR);
// 你的代码
LeaveCriticalSection(&CRITICAL_WRITEVAR);
}程序退出时
DeleteCriticalSection( &CRITICAL_WRITEVAR);// 删除