WinSock---WSAAsyncSelect IO模型和select模型的比较

WinSock I/O 模型 1、select 模型 int select( _In_ int nfds, _Inout_ fd_set *readfds, _Inout_ fd_set *writefds, _Inout_ fd_set *exceptfds, _In_ const struct timeval *timeout ); eg:获取读集 fd_se 阅读详情

 

关于WSAAsyncSelect IO模型和 select模型的比较。

个人认为一个是被动的,一个是被动的。

 

WSAAsyncSelect IO模型 是基于事件的。也就是说用 WINSOCK_API_LINKAGE int WSAAPI
WSAAsyncSelect(
    SOCKET s,
    HWND hWnd,
    u_int wMsg,
    long lEvent
    );函数去注册一个事件(估计在这个函数里开了线程,注意到 这里传的参数非常详细,有HWND,所以。。。。) ,然后单这个socket接到数据,或者有别的IO操作时,只要他注册了这个事件,就会向 hWnd发送消息(连带数据 一起发了), 然后在界面线程 接受到消息,进过消息路由,转到指定函数,就可以对这个socket进行处理了。比如这个消息处理函数是 OnSockMsg(WPARAM wParam,LPARAM lParam)

其中 wParam 就是当前socket了。lParam(LOWORD(lParam)) 的低位就是 所发生的事件类型了,通过这个可以指定对不通的事件做特定操作..

 

 

 

 

select 模型 就不同了,因为什么都要自己写,我觉的可以通过select 模仿  封装出 WSAAsyncSelect IO模型 。

 

这个编程模型中需要注意的是。他有一个fd_set结构,这个结构是用来包含 socket 的。当 调用 WSAAPI
select(
    int nfds,
    fd_set FAR * readfds,
    fd_set FAR * writefds,
    fd_set FAR *exceptfds,
    const struct timeval FAR * timeout
    );

 

将这个 集合传到相应的参数,

 

然后  select 函数 会判断是否可以进行相应的操作,如果可以就返回TRUE了。

 

哈哈,这里没有返回可以进行 相应操作的集合,呃,为什么呢,呵呵。

 

所以我们还要判断 想要操作的socket是否在这个集合中。这里用FD_ISSET(fd, set) 宏就可以了。

 

他会判断 socket是否在集合中,如果在,就可以用这个socket进行相应的操作了。

 

 

 

WSAAsyncSelect 模型  是一定要异步的,没的选。

 

select模型 可以不异步吧,但是他能这样就没必要用他了。。。

 

 

 

 

 

windows下多路复用IO(select,WSAAsyncSelect,WSAEventSelect) 立即下载

相关推荐

WSAASYNCSELECT模型-概述,Winsock I/O模型基础

WSAASYNCSELECT模型-概述,Winsock I/O模型基础,这是套接字编程的必须学习的知识哦

网络通信之select、poll、WSAAsyncSelect、WSAEventSelect、IOCP、epoll

第2级别的函数相当于变主动查询为被动通知,即网络事件发生时,系统会通知我们处理。select和poll函数在本质上还是在一定时间内主动查询在一组 socket句柄(一个或是多个)上是否有网络事件(可读事件、可写事件或出错事件等),也就是说,我们必须每隔一段时间就主动做这些检测操作。原因是,假设一个服务器有多个连接,在CPU 时间片有限的情况下,我们花费了一定时间检测一部分 socket的网络事件,却发现什么事件都没有,而我们在这段时间内可能有其他事情需要处理,那我们为什么要花时间去做这种检测呢?

Zy100Papa的博客 655

ATE自动化测试设备:硬件与软件的完美协同

本文深入解析了ATE自动化测试设备如何通过硬件与软件的完美协同,实现高效、精准的电子产品测试。文章详细阐述了ATE系统的硬件架构(如测试控制器、仪器模块、开关矩阵)与软件层次(如测试管理、仪器控制、数据分析),并结合实战案例,揭示了软硬件协同设计在提升测试效率与可靠性中的关键作用。

weixin_29218509的博客 165

socket编程的select模型

在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下。 其实,socket编程提供了很多...

weixin_30338481的博客 494

退火朗之万动力学采样

退火朗之万动力学采样(Simulated Annealing Langevin Dynamics Sampling)结合了退火技术和朗之万动力学,是一种用于分子模拟和统计物理中的计算方法。这种方法可以帮助系统从局部最小值中逃逸,以找到全局最小值或进行有效的配置空间探索。

weixin_39699362的博客 1947

Dzzoffice结合OnlyOffice 报错排查流程总结

首先访问 OnlyOffice 首页,如下图:出现上图仍旧不能说明你的 OnlyOffice 服务已经成功安装,我们需要启动 OnlyOffice 服务测试用例来检测,可以看到上图出现了两条命令,第一条命令是用来启动测试用例服务的,我们只需要在后台执行该命令即可,Windows环境是以管理员身份运行Windows PowerShell输入即可运行了。

小胡的博客 4595

[笔记]windows网络编程之常见模型

对多个socket 进行管理 调用select()可以获取指定socket状态,即select 选择获得有响应的指定的socket。

二次元怪兽的博客 1528

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1302

WSAAsyncSelect() 非阻塞模式WinSock

测试资源地址 所幸的是,WinSock同时提供了非阻塞模式,并提出了几种I/O模型。最常见的I/O模型有select模型、WSAAsyncSelect模型及 WSAEventSelect模型,下面选择其中的WSAAsyncSelect模型进行介绍。使用WSAAsyncSelect模型将非阻塞模式引入到应用程序中的过 程看起来很简单,事实上你只需要多添加一个函数就够了。 int WSAAsy

Car12 631

B3640 T3 句子反转

要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。第一次做的时候0分,两个小时没做出来。仅一行,表示程序对句子的处理结果。仅一行,即需要反转的句子。

小前日记 366

从 SAP GUI 走向 SAP Fiori:一套面向 SAP S/4HANA 的用户迁移实战方法论

SAP S/4HANA转型中,用户从SAP GUI迁移到Fiori的难点在于业务价值的重构而非简单的界面替换。Fiori的核心价值在于角色化、实时洞察和智能决策,而非完全替代GUI。成功迁移需分阶段推进:先展示关键角色的价值,建立统一入口,再逐步提高Fiori占比。让用户参与设计比后期培训更重要,需通过具体场景(如采购优先级管理)展示效率提升。迁移策略应平衡新旧界面优势,让Fiori成为业务价值触达的主要方式,而非强制替换。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 235

网络编程学习小结

网络编程学习小结

qq_43747700的博客 525

SAP-ABAP:SAP信贷管理核心:CL_UKM_BUPA_FACTORY类完整解析与实践指南

SAP信贷管理核心类CL_UKM_BUPA_FACTORY解析 CL_UKM_BUPA_FACTORY是SAP信贷管理(UKM)模块的核心类,作为业务伙伴信贷数据的中央控制台,它提供: 统一入口:标准化实例化客户/供应商信贷对象 主要功能: 获取单条/批量业务伙伴数据 安全保存数据变更 封装底层数据访问逻辑 典型应用场景: 信贷主数据批量维护 自动化限额调整 订单信贷实时检查 性能优化建议: 使用批量方法替代循环单条处理 合理设置字段选择 实施缓存策略 该类通过简洁API简化复杂信贷操作,是SAP信贷管理开

baidu_35680696的博客 1208

WinSock三种选择I/O模型

select模型本质上是一种分类处理思想,预先声明几个FD_SET(fd_set结构)集合(使用FD_ZERO初始化),例如ReadSet、WriteSet,fd_set数据类型本质上代表着一系列按关注事件分类的套接字集合。 本文讨论三种选择模型(都带select,姑且这样称呼):select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)。

曾梦想仗剑走天涯 5720

堆一呼一吸之间:动态扩缩容引发JVM堆内存震荡的伸缩算法、代际传导与容器定容解析

Kubernetes扩容后,新Java实例的GC频率常比老实例高出数倍,堆容量反复伸缩。本文从一次支付系统的GC陡增出发,结合HotSpot源码与JDK 8实测,拆解堆伸缩的记账规则:期望容量以GC后已用量为基数、以Xms为下限,按空闲比例判断扩缩,收缩只在老年代回收后按0%、10%、40%、100%步进;再剖析年轻代随老年代联动、晋升风暴与元空间触发线,对比Parallel、G1、ZGC等收集器及JDK 26的变化,讨论容器分账、HPA共振与原地扩缩容,最后给出分级定容、预热与监控的方案。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 15万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WinSock IO 模型形象说明

windows   网络程序设计 王艳平出的..有点介绍.还不错..另外从网上抄了一份《Socket   I/O模型全接触》  作  者:   flyinwuhan   (制怒·三思而后行)  本文简单介绍了当前Windows支持的各种Socket   I/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:

蓝魔的专栏 1664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Winsock I/O 模型:性能和可扩展性的关键

Select模型是Windows Socket中最基本的一种同步I/O模型。它通过使用Select函数,开发者可以监视一组socket的状态变化,例如可读性、可写性、错误状态等。Select模型使用轮询机制,让开发者在一个线程内管理多个socket,有效减少资源的负担。然而,由于Select模型的低效轮询机制,在处理大规模并发连接时会面临性能瓶颈。

JAZJD的博客 1538

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【转载&整理】Winsock 非阻塞IO

先来说一下同步/异步、阻塞/非阻塞的问题。同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。阻塞调用是指调用结果返回之前,当

Height'>0 714

Winsock 套接字非阻塞模式小例程 WinSock IO模型

服务器端使用非阻塞套接字,允许有多个客户接入。客户端使用阻塞套接字。服务器端循环轮询方式。 /***设套接字为非阻塞模式***/ unsigned long ul = 1; int nRet=ioctlsocket(sock_server, FIONBIO, &ul); //设置套接字非阻塞模式 if (nRet == SOCKET_ERROR) { cout <&lt...

m0_37357063的博客 3101

WinSock的I/O模型

阻塞与非阻塞阻塞是指一个线程在调用一个函数时,该函数由于某种原因不能立即完成,导致线程处于等待状态。能引起阻塞的套接字函数实际上也是I/O函数,只不过他们的操作设备是网络,因此阻塞模式下的函数也被称为网络i/o函数。阻塞模式下的函数包括:accept()——监听套接字的缓冲队列中没有已达到的连接请求,则阻塞,当有连接请求到达时恢复。connect()——连接请求发送出去便阻塞,直到TCP/IP三次握手过程成功结束,返回对客户端连接请求的确认。

qq_53830608的博客 2184

WinSock 异步I/O模型

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了五种I/O模型,分别是:■ 选择(select);■ 异步选择(WSAAsyncSelect);■ 事件选择(WSAEventSelect);■ 重叠I/O(Overlapped I/O);■ 完成端口(Completion Port)(+线程池技术) 。    每一种模型适用于一种特定的应用场景。大家应该针对自己应用程序的需求,综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。     待

netanimals的专栏 1468

套接字IO模型(一) Select模型

讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事。 套接字模式:阻塞套接字和非阻塞套接字。或者叫同步套接字和异步套接字。 套接字模型:描述如何对套接字的I/O行为进行管理。 Winsock提供的I/O模型一共有五种: select,WSAAsyncSelect,WSAEventSe...

assdg2015的博客 253

WINSOCK IO 方法

套接字模式:锁定、非锁定套接字I/O模型:      select(选择)WSAAsyncSelect(异步选择)WSAEventSelect(事件选择)Overlapped I/O(重叠式I / O)Completion port(完成端口)  一、 简介 套接字模型的出现,是为了解

legion8169的专栏 968
上一篇: 开机自启动
下一篇: 进程间通信
xyjnufop
博客等级 码龄19年 10粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值