网络编程时遇到线程同步问题

rightorwrong 2009-08-24 10:11:04
加精
代码结构有些问题
代码中有三个线程:Aselect监听线程B命令处理线程C客户端离线检测线程.代码逻辑是这样的。每个接入的客户端需要先进行命令通信,命令通信成功后,再建立一个数据通信的SOCKET接收客户端数据。
有两个地方的线程同步出现问题:
1.Aselect监听线程,一个客户端需要监听2个socket,命令socket和数据socket.A中再用FD_ISSET判断是那个socket时,可能C线程坚测到离线或者B命令处理线程因为通信不成功,需要FD_CLR这个SOCKET
在FD_ISSET时需要做同步,那么就要在recv间使用,以下代码中需要对这个for循环进行同步,
这样性能会有影响.如何处理个问题呢

for(i=0; i<m_socketVector.size(); i++)
{
if(FD_ISSET(m_socketVector[i]->sActive, &fReadSet))
{
if(m_socketVector[i]->stType.nMajorType == SOCKET_LISTEN)
{
AcceptClient();
}
else
{
SocketType stType = m_socketVector[i]->stType;
if(stType.nMajorType == DATA_CLIENT_SOCKET)
{
recv
}
}
}

离线检测是这样说的,命令通信成功后,一直有数据进行通信,来一次数据我计数(GetTickCount)一次。线程中我比较当前的计数来确定是否离线
...全文
1536 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
w20011025 2009-09-09
  • 打赏
  • 举报
回复
学习
ljzforever 2009-08-30
  • 打赏
  • 举报
回复
123,321,1234567
Tomzzu 2009-08-27
  • 打赏
  • 举报
回复
修改数据只能放在临界区, 因为循环的次数少, 粒度应该不是很大
knd001 2009-08-27
  • 打赏
  • 举报
回复
恩,学习学习
哈利路亚1874 2009-08-27
  • 打赏
  • 举报
回复
我个人觉得用WM_MESSAGE的方式最好!
当事件发生时,你发出一个消息,然后捕获到消息就进入到for循环中,这样也很节约资源!
xinxingxiangying 2009-08-26
  • 打赏
  • 举报
回复
网络编程这块我是刚入门,奇怪了一点看不懂楼主的代码
snailiest 2009-08-26
  • 打赏
  • 举报
回复
mark
a569030907 2009-08-26
  • 打赏
  • 举报
回复
我也来学习
liyulun 2009-08-26
  • 打赏
  • 举报
回复
学习中...
fenchen1 2009-08-26
  • 打赏
  • 举报
回复
不错,谢谢分享
我辣椒哥 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 conry 的回复:]
你的代码结构是有些问题
监听的socket应该放到单独的数组里面,你的这个就两个,用两个变量也可以

接收到得命令socket跟数据socket也应该分别存放

只是添加删除socket的时候需要同步,其他时候不用


[/Quote]

UP
sjf123sjf 2009-08-26
  • 打赏
  • 举报
回复
顶 学习下
hhwei1985 2009-08-26
  • 打赏
  • 举报
回复
up
jilinzzp 2009-08-26
  • 打赏
  • 举报
回复
开线程,用Event进行同步 然后用cuk调用
bingyuqing 2009-08-26
  • 打赏
  • 举报
回复
学习下
w20011025 2009-08-25
  • 打赏
  • 举报
回复
学习学习
谢谢

dronly 2009-08-25
  • 打赏
  • 举报
回复
我是来学习的.
dulvtianya 2009-08-25
  • 打赏
  • 举报
回复
学习啊学习
henanxsc 2009-08-25
  • 打赏
  • 举报
回复
相当可以
hzj72 2009-08-25
  • 打赏
  • 举报
回复
你的代码结构是有些问题
监听的socket应该放到单独的数组里面,你的这个就两个,用两个变量也可以

接收到得命令socket跟数据socket也应该分别存放

只是添加删除socket的时候需要同步,其他时候不用

加载更多回复(35)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧