完成端口的GetQueuedCompletionStatus 的设计问题

ShapeRock 2005-09-29 11:25:29
在线程中GetQueuedCompletionStatus()触发时,如果客户端发送10MB的东西,会分包发过来,这样,会触发多个线程来读各个包,我怎么设计能让一个线程读所有这10MB的数据,然后组成一个包使用。
...全文
235 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
skykeen 2005-10-07
  • 打赏
  • 举报
回复
会有10M的包?你发一个看看,udp,tcp的最大包都是64k啊
netgm 2005-10-04
  • 打赏
  • 举报
回复
是啊.楼上的没错.没问题...每个都是单独的buf
buf的数据你想怎么玩就怎么玩..不会和其它的sock相冲
sevencat 2005-10-03
  • 打赏
  • 举报
回复
你需要保证对一个socket只投出一个wsarecv(),这样的话,你每次收回一个完成事件后,再对这个socket投下一个wsarecv(),下来就是为一个socket开一个buff保存你的数据了!

//================================================================
我觉得这样就OK了。没啥问题呀。
iorikingdom 2005-10-01
  • 打赏
  • 举报
回复
不过你用了把代码贴出来,大家看看效率如何,这个好像有点研究
iorikingdom 2005-10-01
  • 打赏
  • 举报
回复
用这个嘛
TransmitFile
dingpiao 2005-09-30
  • 打赏
  • 举报
回复
单句柄数据还是叫单什么数据来着,在那里开缓冲或者先写到硬盘在那里存个文件名
lifengice0706 2005-09-30
  • 打赏
  • 举报
回复
你只投了一个wsarecv(),这时他刚刚被触发完成事件,那么针对这个socket怎么还会有GetQueuedCompletionStatus()在另一个线程中触发呢?
周江涛 2005-09-30
  • 打赏
  • 举报
回复
为什么要一个线程去读10M?多线程交替工作,效率不是更高?
ShapeRock 2005-09-30
  • 打赏
  • 举报
回复
to :lifengice0706,你说的不行吧。刚数据来时,他还会处发GetQueuedCompletionStatus(),这样可能别一个线程就处理了。这不出问题了吗。
stonex_2000 2005-09-29
  • 打赏
  • 举报
回复
把收到的东西都放到一个链表里,然后用一个线程去读就可以了。
文件用内存影射文件,当得到一个包时,将链表的节点中的数据直接写进去,
呵呵,这不就很好解决了吗?
lifengice0706 2005-09-29
  • 打赏
  • 举报
回复
你需要保证对一个socket只投出一个wsarecv(),这样的话,你每次收回一个完成事件后,再对这个socket投下一个wsarecv(),下来就是为一个socket开一个buff保存你的数据了!
everandforever 2005-09-29
  • 打赏
  • 举报
回复
一个数据包就有10M,你这设计真的不能说是好的。
ximenying 2005-09-29
  • 打赏
  • 举报
回复
你可以通过设置WSARecv的缓冲区长度为0来触发FD_READ事件,然后再调用recv去阻塞收取指定大小的数据
ximenying 2005-09-29
  • 打赏
  • 举报
回复
我有一个办法,也是今天才搞定的,

18,356

社区成员

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

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