完成端口的GetQueuedCompletionStatus 的设计问题

ShapeRock 2005-09-29 11:25:29
在线程中GetQueuedCompletionStatus()触发时,如果客户端发送10MB的东西,会分包发过来,这样,会触发多个线程来读各个包,我怎么设计能让一个线程读所有这10MB的数据,然后组成一个包使用。
...全文
208 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
我有一个办法,也是今天才搞定的,
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-09-29 11:25
社区公告
暂无公告