




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
线程同步与异步套接 字编程 主讲人:孙鑫 事件对象 n事件对象也属于内核对象,包含一个使用计数, 一个用于指明该事件是一个自动重置的事件还是 一个人工重置的事件的布尔值,另一个用于指明 该事件处于已通知状态还是未通知状态的布尔值 。 n有两种不同类型的事件对象。一种是人工重置的 事件,另一种是自动重置的事件。当人工重置的 事件得到通知时,等待该事件的所有线程均变为 可调度线程。当一个自动重置的事件得到通知时 ,等待该事件的线程中只有一个线程变为可调度 线程。 关键代码段 n关键代码段(临界区)工作在用户方式下。 n关键代码段(临界区)是指一个小代码段,在 代码能够执行前,它必须独占对某些资源 的访问权。 线程死锁 n哲学家进餐的问题 n线程1拥有了临界区对象A,等待临界区对 象B的拥有权,线程2拥有了临界区对象B, 等待临界区对象A的拥有权,就造成了死锁 。 互斥对象、事件对象与关键代码段 的比较 n互斥对象和事件对象属于内核对象,利用 内核对象进行线程同步,速度较慢,但利 用互斥对象和事件对象这样的内核对象, 可以在多个进程中的各个线程间进行同步 。 n关键代码段是工作在用户方式下,同步速 度较快,但在使用关键代码段时,很容易 进入死锁状态,因为在等待进入关键代码 段时无法设定超时值。 推荐书目 Windows核心编程 机械工业出版社 基于消息的异步套接字 nWindows套接字在两种模式下执行I/O操作,阻塞和非阻 塞。在阻塞模式下,在I/O操作完成前,执行操作的 Winsock函数会一直等待下去,不会立即返回程序(将控制 权交还给程序)。而在非阻塞模式下,Winsock函数无论如 何都会立即返回。 nWindows Sockets为了支持Windows消息驱动机制,使应用 程序开发者能够方便地处理网络通信,它对网络事件采用 了基于消息的异步存取策略。 nWindows Sockets的异步选择函数WSAAsyncSelect()提供了消 息机制的网络事件选择,当使用它登记的网络事件发生时 ,Windows应用程序相应的窗口函数将收到一个消息,消 息中指示了发生的网络事件,以及与事件相关的一些信息 。 相关函数说明 int WSAEnumProtocols( LPINT lpiProtocols, LPWSAPROTOCOL_INFO lpProtocolBuffer, ILPDWORD lpdwBufferLength ); nWin32平台支持多种不同的网络协议,采用Winsock2,就可以编写可 直接使用任何一种协议的网络应用程序了。通过WSAEnumProtocols函 数可以获得系统中安装的网络协议的相关信息。 nlpiProtocols,一个以NULL结尾的协议标识号数组。这个参数是可选的 ,如果lpiProtocols为NULL,则返回所有可用协议的信息,否则,只返 回数组中列出的协议信息。 nlpProtocolBuffer,out,一个用WSAPROTOCOL_INFO结构体填充的缓冲 区。 WSAPROTOCOL_INFO结构体用来存放或得到一个指定协议的 完整信息。 nlpdwBufferLength,in, out,在输入时,指定传递给WSAEnumProtocols() 函数的lpProtocolBuffer缓冲区的长度;在输出时,存有获取所有请求信息 需传递给WSAEnumProtocols ()函数的最小缓冲区长度。这个函数不能 重复调用,传入的缓冲区必须足够大以便能存放所有的元素。这个规 定降低了该函数的复杂度,并且由于一个 机器上装载的协议数目往往 是很少的,所以并不会产生问题。 相关函数说明 SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INFO lpProtocolInfo, GROUP g, DWORD dwFlags ); n前三个参数和socket()函数的前三个参数含义一样。 nlpProtocolInfo,一个指向WSAPROTOCOL_INFO结构体的指 针,该结构定义了所创建的套接字的特性。如果 lpProtocolInfo为NULL,则WinSock2 DLL使用前三个参数来 决定使用哪一个服务提供者,它选择能够支持规定的地址 族、套接字类型和协议值的第一个传输提供者。如果 lpProtocolInfo不为NULL,则套接字绑定到与指定的结构 WSAPROTOCOL_INFO相关的提供者。 ng,保留的。 ndwFlags,套接字属性的描述。 相关函数说明 int WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr FAR *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); ns,标识套接字的描述符。 nlpBuffers,in, out,一个指向WSABUF结构体的指针。每一个WSABUF结构体包 含一个缓冲区的指针和缓冲区的长度。 ndwBufferCount, lpBuffers数组中WSABUF结构体的数目。 nlpNumberOfBytesRecvd,out,如果接收操作立即完成,则为一个指向本次调用所 接收的字节数的指针。 nlpFlags,in, out,一个指向标志位的指针。 nlpFrom,out,可选指针,指向重叠操作完成后存放源地址的缓冲区。 nlpFromlen,in, out,指向from缓冲区大小的指针,仅当指定了lpFrom才需要。 nlpOverlapped,一个指向WSAOVERLAPPED结构体的指针(对于非重叠套接字则 忽略)。 nlpCompletionRoutine,一个指向接收操作完成时调用的完成例程的指针(对于非重 叠套接字则忽略)。 相关函数说明 int WSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr FAR *lpTo, int iToLen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); ns,标识一个套接字(可能已连接)的描述符。 nlpBuffers,一个指向WSABUF结构体的指针。每一个WSABUF结构体包含一个 缓冲区的指针和缓冲区的长度。 ndwBufferCount, lpBuffers数组中WSABUF结构体的数目。 nlpNumberOfBytesSent,out,如果发送操作立即完成,则为一个指向本次调用所 发送的字节数的指针。 ndwFlags,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷链物流速冻加工项目实施方案
- 物理基础概念与实验操作知识考核
- 乡村公共卫生服务现状与发展趋势分析
- 校园饮水安全现状分析与挑战
- 物理实验设计与操作:《高中物理实验课程教案》
- 地方政府在落实失业保险稳岗政策中的创新措施
- 移动应用开发基础知识点习题
- 生物学遗传学知识点详解与习题集
- 2025年艺术审美与创造力发展考试试题及答案
- 2025年无人机技术应用与管理培训考试题及答案
- PEP小学英语四年级上册-Unit4-my-home-part-B-let's-talk
- 广东省广州市天河区华南师大附中2024届语文八年级第二学期期末监测试题含解析
- 跨学科知识图谱构建与应用
- 帕瓦娜的守候
- 《大气污染控制》课件
- 医药招商电话技巧
- 一例梅毒患者的护理查房课件
- 非财务人员看报表课件
- 读书分享读书交流会《人生海海》
- 学校食堂食材配送服务方案(肉类、粮油米面、蔬菜水果类)
- 信用修复申请书
评论
0/150
提交评论