社区
网络编程
帖子详情
完成端口的GetQueuedCompletionStatus 的设计问题
ShapeRock
2005-09-29 11:25:29
在线程中GetQueuedCompletionStatus()触发时,如果客户端发送10MB的东西,会分包发过来,这样,会触发多个线程来读各个包,我怎么设计能让一个线程读所有这10MB的数据,然后组成一个包使用。
...全文
245
14
打赏
收藏
完成端口的GetQueuedCompletionStatus 的设计问题
在线程中GetQueuedCompletionStatus()触发时,如果客户端发送10MB的东西,会分包发过来,这样,会触发多个线程来读各个包,我怎么设计能让一个线程读所有这10MB的数据,然后组成一个包使用。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
我有一个办法,也是今天才搞定的,
完成
端口
(
Com
p
let
ion
Port)详解
使用`Get
Queue
d
Com
p
let
ion
Status
`或`Get
Queue
d
Com
p
let
ion
Status
Ex`函数,可以从
完成
端口
获取已
完成
的I/O请求。这些函数会阻塞,直到有新的
完成
事件出现。返回的信息包括
完成
状态、传输的数据量以及一个用户提供的...
基于
完成
端口
的服务器程序源代码
在IT领域,
完成
端口
(IOCP,Input/Output
Com
p
let
ion
Port)是一种高效的多线程并发I/O模型,常用于Windows操作系统中的服务器程序
设计
。本文将深入探讨基于
完成
端口
的服务器程序源代码及其核心概念。 首先,理解...
完成
端口
(vc
完成
端口
下载文件的代码)
在VC++中,可以使用`CreateIo
Com
p
let
ion
Port`函数创建
完成
端口
,`Get
Queue
d
Com
p
let
ion
Status
`函数用于从
端口
取出已
完成
的I/O请求,而`Post
Queue
d
Com
p
let
ion
Status
`函数则用于模拟I/O
完成
,例如在登录或版本验证成功...
c++
完成
端口
使用实例
在C++中实现
完成
端口
,通常需要
设计
一个线程池来处理从
完成
端口
取出的任务。线程池中的线程会循环调用`Get
Queue
d
Com
p
let
ion
Status
`,获取
完成
的I/O操作,然后根据操作类型执行相应的业务逻辑。例如,如果是新连接,...
完成
端口
最珍贵的资料
完成
端口
正是为了解决这一
问题
而
设计
,它采用少量的线程来处理大量客户端的I/O请求,从而大幅减少了线程上下文切换的需要。
完成
端口
的运行演示表明,在高并发场景下,采用
完成
端口
的服务器端程序CPU占用率极低,远...
网络编程
18,358
社区成员
64,186
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章