iocp初级问题

zjfhgdx 2011-09-05 12:27:29
我的IOCP服务器程序有两个线程.A,B

如果:当一个客户端发来数据时,
A处理了这个数据,但在A处理完这个数据前,同一个客户端又发来了数据.
这时线程B有没有可能会处理这个数据呢?

哦对了我是在一个线程处理完一个客户端数据后才调用下面的两个函数
WSARecv(iwrol->m_sockAccept,&wsaBuf,1,&dwRecv,&dwFlag,&(iwrol->m_ol),0);
CreateIoCompletionPort((HANDLE)iwrol->m_sockAccept,iocpp->m_hIOCP,0,iThreadCount);
这样是不是可以保证,同一个socket连接不会同时被两个线程处理?

请教,谢谢.
...全文
127 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zjfhgdx 的回复:]
引用 1 楼 smwhotjay 的回复:

win core

是win via吧?看过
[/Quote]
看过,理解了没?iocp的方式.
zjfhgdx 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smwhotjay 的回复:]

引用 5 楼 zjfhgdx 的回复:
引用 1 楼 smwhotjay 的回复:

win core

是win via吧?看过

看过,理解了没?iocp的方式.
[/Quote]

理解,我只是想更加确定

to:chenjiawei
我的是一个线程里面处理socket数据,这个数据处理完再处理下一个,并不是每个socket一个纯和.

谢谢大家的回复
chenjiawei007 2011-09-09
  • 打赏
  • 举报
回复
没必要保证 一个SOCKET 一个线程处理,

建立一个MAP表,SOCKET做KEY,VALUE用DEQUE,接受来的请求,根据SOKCET分发到队列中去。
xxq123321 2011-09-08
  • 打赏
  • 举报
回复
你要使用通用的正确的IOCP编程模型,而不是按自己的编程方式来使用iocp,可以参考window的文档或其它示例代码
zjfhgdx 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 smwhotjay 的回复:]

win core
[/Quote]
是win via吧?看过
zjfhgdx 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 shenyi0106 的回复:]

不能保证,即便你是让一个工作者线程处理完成后在调用WSARecv的,因为工作者线程的调用不是由你觉得定,是由OS决定的,它会优先选择当前正在活动的线程来获取下一次的网络消息。

理解IOCP的一个重要的过程就是理解IOCP的WORKER THREAD,它是“全局的”,服务于所有已经连接的socket的(如果使用AcceptEx,那么它还服务于准备建立连接的socket),后续的“包裹”会有当……
[/Quote]

那肿么办?
shenyi0106 2011-09-05
  • 打赏
  • 举报
回复
不能保证,即便你是让一个工作者线程处理完成后在调用WSARecv的,因为工作者线程的调用不是由你觉得定,是由OS决定的,它会优先选择当前正在活动的线程来获取下一次的网络消息。

理解IOCP的一个重要的过程就是理解IOCP的WORKER THREAD,它是“全局的”,服务于所有已经连接的socket的(如果使用AcceptEx,那么它还服务于准备建立连接的socket),后续的“包裹”会有当前正在活动的线程来处理,目的是为了尽量减少线程切换
zjfhgdx 2011-09-05
  • 打赏
  • 举报
回复
我是在处理完已接收的数据后再投递wsarecv的.
不过貌似还是存在问题.难道是其它地方的问题?
我再研究研究
smwhotjay 2011-09-05
  • 打赏
  • 举报
回复
A,B线程里都是iocp 循环GetIOCPStatus来取完成消息.

如果你对一个sock调用了一次WSARecv. 那么任意A,B可以获得这个recv完成消息.
.如果你对这sock调用了2次WSARecv.那么任意A,B可能AB 可能A,可能B 获得这2个完成消息. 所以我一般是单异步Recv.iocp处理完后再继续WSARecv(同时对sock投递多个异步recv,不好控制同步). 这样可以保证数据包的接收顺序. 这个在win core编程里iocp有详细介绍.以及分析.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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