WINDOWSMFC网络IO模型(一).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WINDOWSMFC网络IO模型(一).ppt

WinSock IO模型(一) 回顾 线程基础 线程同步 互斥量 事件 关键代码段(临界区) 信号量 线程间数据交互 线程死锁 本章目标 套接字模型 套接字I/O模型 select模型 WSAAsyncSelect模型 套接字模型 套接字在两种模式下执行I/O操作 阻塞模式:在I/O操作完成前,执行操作的Winsock函数(比如send和recv)会一直等候下去,不会立即返回程序(将控制权交还给程序) 非阻塞模式:Winsock函数无论如何都会立即返回 套接字IO模型 共有五种类型的套接字I/O模型,可让 Winsock应用程序对I/O进行管理,它们包 括: select(选择) WSAAsyncSelect(异步选择) WSAEventSelect(事件选择) Overlapped(重叠) completion port(完成端口) select 模型 select函数什么情况下返回 作为一个例子,我们可以调用函数select 并通知内核仅在下列情况发生时才返回: 集合{1,4,5}中的任何描述子准备好读或 集合{2,7}中的任何描述字准备好写或 集合{1,4}中的任何描述字有异常条件待处理或 已经过了10.2秒 也就是说,通知内核我们对哪些描述字感 兴趣(读、写或异常条件)以及等待多长 时间。 select函数原型 timeval结构 timeout参数 timeout参数有三种可能 永远等待下去:仅在有一个描述字准备好I/O时才返回,为此,我们将timeout设置为空指针 等待固定时间:在有一个描述字准备好I/O是返回,但不超过由timeout参数所指timeval结构中指定的秒数和微秒数 根本不等待:检查描述字后立即返回,这称为轮询。定时器的值必须为0 fd_set参数 select使用描述字集,它一般是一个整数数组,每个数中的每一位对应一个描述字。 使用fd_set数据类型来表示这个描述字集,我们不用去关心具体的实现细节。 操作fd_set的四个宏 fd_set使用 对集合的初始化是很重要的,如果集合作 为一个自动变量分配而未初始化,那将导 致不可预测的后果 select函数的三个中间参数 中间的三个参数readset、writeset和exceptset指定我们要让内核测试读、写和异常条件所需的描述字 如果我们对某个条件不感兴趣,这三个参数中相应的参数就可以设为空指针 maxfdp1参数 select函数返回值 WSAAsyncSelect模型 为了提高I/O的并发性,Winsock提供了一个有用的异步I/O模型。 WSAAsyncSelect函数提供了消息机制的网络事件选择,当使用它的网络事件发生时,Windows应用程序相应的窗口函数将收到一个消息,消息中指示了发生的网络事件,以及与该事件相关的一些信息 WSAAsyncSelect函数原型 WSAAsyncSelect函数的网络事件类型 获取网络事件类型 网络事件注册后,当网络事件发生时,会发送指定的消息到指定的窗口 wParam 参数指定具体发生网络事件的套接字 lParam 参数的低位字存储具体的网络事件 可以通过WSAGETSELECTEVENT来获取具体的网络事件 WSAAsyncSelect使用 初始化winsock库,创建一个socket 自定义一个窗口处理消息 利用WSAAsnycSelect注册一个网络事件 自定义消息处理函数对具体网络事件进行处理 WSAAsyncSelect示例 代码演示 总结 套接字模型 套接字I/O模型 select模型 WSAAsyncSelect模型 第十五章 select (选择)模型是Winsock中最常见的I/O模型。 其中心思想便是使用select函数,实现对I/O的管理 利用select函数,我们判断套接字上是否存在数据,或者能否向一个套接字写入数据。 int select( int maxfdp1, fd_set *readset,fd_set *writeset,fd_set *except, const struct timeval *timeout ); 虽然结构timeval为我们指定了一个微秒级的分辨率,但内核支持的分辨率却要粗糙得多。例如,很多UNIX内核将超时值向上舍入成10ms的倍数。另外还有调度延迟现象,即定时器时间到后内核还需花一点时间调度相应进程的运行 struct timeval( long tv_sec; //秒 long tv_usec;//微秒 ); void FD_ZERO(fd_set *fdset); //清空描述字集合 void FD_SET(int fd, fd_set *fdset); //添加一个描述字到集合中

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档