⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_win32多线程程序设计学习笔记(第六章 下).htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
          <TD align=middle height=10 width=50></TD>
          <TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A 
            href="http://www.csdn.net/develop/">文档中心</A> - <FONT 
            color=#003399>Visual C++</FONT>&nbsp;&nbsp;&nbsp;&nbsp; </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>标题</FONT></TD>
          <TD><B>&nbsp;&nbsp;&nbsp;&nbsp;WIN32多线程程序设计学习笔记(第六章 
            下)</B>&nbsp;&nbsp;&nbsp;&nbsp;chinani(原作) </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
          <TD width=500>&nbsp;&nbsp;&nbsp;&nbsp;多线程,学习笔记</TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
      <TABLE border=0 width=600>
        <TBODY>
        <TR>
          <TD align=left><BR>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">继续。。。<SPAN 
            lang=EN-US><?xml:namespace prefix = o ns = 
            "urn:schemas-microsoft-com:office:office" 
            /><o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">上面的程序片段使用<SPAN 
            lang=EN-US>WaitForMultipleObjects函数来等待,会有两个问题:<o:p></o:p></SPAN></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">第一、<SPAN 
            style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">只能等待小于<SPAN 
            lang=EN-US>64个的对象,这是WaitForMultipleObjects函数本身所带来的限制。<o:p></o:p></SPAN></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; mso-list: l0 level1 lfo2; tab-stops: list 36.0pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">第二、<SPAN 
            style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">你必须不断根据“哪一个<SPAN 
            lang=EN-US>handle被激发”而计算如何处理。那个这个程序的结构可不是很清晰,以后维护可不方便<o:p></o:p></SPAN></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">&nbsp;<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">那么书上在这里提供了一个异步过程调用(<SPAN 
            lang=EN-US>APCs)的方法来解决这些问题<o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">&nbsp;<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">APCs的核心观点是:</SPAN><SPAN 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">提供一个函数,当<SPAN 
            lang=EN-US>overlapped I/O操作完成时,自动调用此函数</SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">注意:运用<SPAN 
            lang=EN-US>APCs,必须使用<B>ReadFileEx()、WriteFileEx 
            ()<o:p></o:p></B></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">例子:<SPAN 
            lang=EN-US><o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//自定义函数,供overlapped 
            I/O操作完成时调用<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">VOID 
            WINAPI </SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">MyFunc</SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">(DWORD 
            dwErrorCode,<SPAN style="mso-spacerun: yes">&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//完成码 
            <o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">DWORD 
            dwNumberOfBytesTransfered,</SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// 
            被传递的字节数目<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN></SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;</SPAN>LPOVERLAPPED lpOverlapped 
            </SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>//指向OVERLAPPED 
            结构的指针<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;</SPAN></SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">)<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">{<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//这里运用了一个技巧,因为使用APCs技术;那么OVERLAPPED 
            结构的<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN>//event栏位没有什么用,可以用它来传递一些参数。<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//在这里利用它传递序号,以表明是誰完成了overlapped 
            I/O<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>int nIndex = 
            (int)(lpOverlapped-&gt;hEvent);<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//针对nIndex,做一些操作<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>switch ( nIndex 
            )<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN>{<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>case 1 :<SPAN style="mso-spacerun: yes">&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//做一些操作。。。</SPAN></B><B><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"> <SPAN 
            lang=EN-US>break;<o:p></o:p></SPAN></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">case 
            2 :<SPAN style="mso-spacerun: yes">&nbsp; </SPAN></SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//做一些操作。。。</SPAN></B><B><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"> <SPAN 
            lang=EN-US>break;<o:p></o:p></SPAN></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">…..<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
            </SPAN>}<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//如果所有overlapped 
            I/O都处理完毕,将全局event激发,使主程序结束<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>if 
            (++nCompletionCount == MAX_REQUESTS)<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>SetEvent(ghEvent);<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -