WinSocket的几种异步模式总结

本文详细介绍了在Winsock Non-block模式下进行异步接收的四种方法:使用WSAAsyncSelect、创建线程使用select模式、使用完成端口及使用Overlap模式。每种方法都附带了其优缺点说明,帮助开发者选择最适合自身需求的技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Winsock Non-block模式的时候,我们有多少种方法进行异步接收?总共4种!

1. 使用WSAAsyncSelect:

    使用该方法可以指定两种模式,一种是事件通知,另外一种是窗口通知。就是有数据的时候通知上层进行接收。这个是在Windows上面使用最多的。

2. 创建线程使用select模式:

    这个方法的好处是标准接口,基本在系统之间不需要怎么移植,但是实际使用起来还是有点麻烦的,而且在Windows上面是效率最低的一种。

3. 使用完成端口:

    完成端口是效率最高的一种方式,可以省掉很多内存拷贝。因为WIndows的协议栈里面分了很多层,要一层层的拷贝数据,如果使用完成端口就可以省略了。完成端口的原理是,用户传一个指针下去,然后等缓冲里面被写满了数据后通过event通知。这个方法其实实现起来的代码也很精炼哦!98不支持完成端口。

4. 使用Overlap的模式,就是WSARecv最后的OVERLAP参数传一个EVENT进去,等数据填满之后会触发EVENT;可惜的是这个方法内存还是会一层一层拷贝的。效率不算最高,代码写法和完成端口类似。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值