📄 6-5.html
字号:
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">	应用程序如果不希望使用阻塞方式,它可以使用</FONT><FONT SIZE=3>WSAGetOverlappedResults()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数来检查与某个特定的事件对象相连的完成状态。该函数检查重叠操作是否完成,如果完成的话,处理重叠操作的出错信息,使得该信息在</FONT><FONT SIZE=3>WSAGetLastError()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>函数调用时可以得到。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="黑体" LANG="ZH-CN" SIZE=4><P><A NAME="_Toc336792976"><A NAME="_Toc336793452"></FONT><FONT FACE="Arial" SIZE=4>6.5.2.3 </FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=4>使用套接口</FONT><FONT FACE="Arial" SIZE=4>I/O</FONT><FONT FACE="黑体" LANG="ZH-CN" SIZE=4>操作完成例程</A></A></P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">	所有的用来初始化重叠</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作的函数(</FONT><FONT SIZE=3>WSASend()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,</FONT><FONT SIZE=3>WSASentTo()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,</FONT><FONT SIZE=3>WSARecv()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,</FONT><FONT SIZE=3>WSARecvFrom()</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)都把</FONT><FONT SIZE=3>lpCompletionRoutine</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>作为输入参数。这是一个应用程序定义的函数指针,在重叠</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作完成时可以被调用。</P>
<P ALIGN="JUSTIFY">	在</FONT><FONT SIZE=3>Win16</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>环境中,回调函数有可能在</FONT><FONT SIZE=3>VMM</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>环境(有时也被称作中断环境)下被激活。传送对时间要求较高的数据(例如视频或音频数据)在这种低延时,占先方式下接受这种指示会很方便。但是应用程序必须知道,在这种特殊情况下,只要很少一部分运行时和</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>库函数可以被调用。作为一条规则,应用程序必须把自己限制在一套</FONT><FONT SIZE=3>Windows</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>文挡说明的在一个多媒体定时回调函数中可以被安全调用的运行时函数库。</P>
<P ALIGN="JUSTIFY">	在</FONT><FONT SIZE=3>Windows 95</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>Windows NT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中,完成例程与</FONT><FONT SIZE=3>Win32</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>文件</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>完成例程遵循着同样的规则。在所有的环境中,传输协议允许应用程序以完成例程的方式唤起发送和接收操作,而且保证对于给定的一个套接口,</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>完成例程不会嵌套。这就允许了在一个占先的环境中进行对时间敏感的数据的传送。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P><A NAME="_Toc336626891"><A NAME="_Toc336792977"><A NAME="_Toc336793453"></FONT><FONT SIZE=5>6.5.3 WSAOVERLAPPED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=5>的细节</A></A></A></P>
</B></FONT><FONT SIZE=3><P ALIGN="JUSTIFY">WSAOVERLAPPED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构提供了一个重叠</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作的初始化和它将来的如何被完成之间的通讯媒体。</FONT><FONT SIZE=3>WSAOVERLAPPED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构被设计成与</FONT><FONT SIZE=3>Win32</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中的</FONT><FONT SIZE=3>OVERLAPPED</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>结构兼容:</P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>typedef struct WSAOVERLAPPED {</P>
<P ALIGN="JUSTIFY">		DWORD Internal; // reserved</P>
<P ALIGN="JUSTIFY">		DWORD InternalHigh; // reserved</P>
<P ALIGN="JUSTIFY">		DWORD Offset; // ignored</P>
<P ALIGN="JUSTIFY">		DWORD OffsetHigh; // ignored</P>
<P ALIGN="JUSTIFY">		WSAEVENT hEvent;</P>
<P ALIGN="JUSTIFY">	} WSAOVERLAPPED, LPWSAOVERLAPPED;</P>
<P ALIGN="JUSTIFY">	</P>
<P ALIGN="JUSTIFY">	Internal </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>这一个保留的域是由重叠</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现的实体内部使用的。对于使用类文件方式创建套接口的传输服务提供者,这一域是被底层的操作系统使用的;对于其他的传输服务提供者(那些创建伪句柄的),可以视需要使用这个域。</P>
<P ALIGN="JUSTIFY">	</P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>InternalHigh </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>这一个保留的域是由重叠</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>实现的实体内部使用的。对于使用类文件方式创建套接口的传输服务提供者,这一域是被底层的操作系统使用的;对于其他的传输服务提供者(那些创建伪句柄的),可以视需要使用这个域。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>Offset </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>由于套接口没有文件偏移量的概念,应用程序可以视需要使用这个域。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>OffsetHigh </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>由于套接口没有文件偏移量的概念,应用程序可以视需要使用这个域。</P>
<P ALIGN="JUSTIFY"></P>
<P ALIGN="JUSTIFY">	</FONT><FONT SIZE=3>hEvent </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>如果一个重叠的</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作在被调用时没有使用</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>操作完成例程(</FONT><FONT SIZE=3>lpCompletionRoutine</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>为空指针),那么这个域必须包含一个有效的</FONT><FONT SIZE=3>WSAEVENT</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>对象的句柄,否则(</FONT><FONT SIZE=3>lpCompletionRoutine</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>不为空指针),应用程序可以视需要使用这个域。</P>
<P ALIGN="JUSTIFY"></P></FONT></BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -