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

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

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      <TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
        <TBODY>
        <TR bgColor=#ffffff>
          <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 align=center class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center; mso-outline-level: 1"><SPAN 
            lang=EN-US 
            style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">WIN32多线程程序设计学习笔记(第六章 
            上)<?xml:namespace prefix = o ns = 
            "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="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"><B><SPAN 
            style="COLOR: purple; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">我们知道当程序调用<SPAN 
            lang=EN-US>I/O设备处理一些事情时,让主程序停下来干等I/O的完成是没有效率的</SPAN></SPAN></B><SPAN 
            style="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 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">方法一:</SPAN></B><SPAN 
            style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">使用另一个线程进行<SPAN 
            lang=EN-US>I/O。但从以前的学习中也知道,协调线程间的关系是一件麻烦的事情,需要小心的设计;所以这个方案可行,但是麻烦。<o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">方法二:</SPAN></B><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">使用<SPAN 
            lang=EN-US>overlapped I/O。正如书上所说:“overlapped 
            I/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成overlapped 
            I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价”。哈!这真是一个好方法!!!<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 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">下面的内容就是来谈怎样使用<SPAN 
            lang=EN-US>overlapped I/O:<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"><B><SPAN 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">进行<SPAN 
            lang=EN-US>I/O操作时,指定overlapped方式<o:p></o:p></SPAN></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>CreateFile(),将其第6个参数指定为FILE_FLAG_OVERLAPPED,就是准备使用overlapped的方式构造或打开文件;如果采用overlapped,那么ReadFile()、WriteFile()的第5个参数必须提供一个指针,指向一个OVERLAPPED结构。OVERLAPPED用于记录了当前正在操作的文件一些相关信息。<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</SPAN></B><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">//功能:从指定文件的1500位置读入300个字节<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">int 
            main()<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-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>BOOL 
            rc;<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; </SPAN>HANDLE 
            hFile;<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; </SPAN>DWORD 
            numread;<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; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">OVERLAPPED 
            overlap;<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; </SPAN>char 
            buf[512];<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; </SPAN>char 
            szPath=”x:\\xxxx\xxxx”;<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">//检查系统,确定是否支持overlapped,(NT以上操作系统支持OVERLAPPED)<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; 
            </SPAN>CheckOsVersion();<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; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">// 
            以overlapped的方式打开文件<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; </SPAN>hFile = 
            CreateFile( szPath,<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>GENERIC_READ,<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>FILE_SHARE_READ|FILE_SHARE_WRITE,<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>NULL,<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>OPEN_EXISTING,<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">FILE_FLAG_OVERLAPPED</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"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>NULL<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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-spacerun: yes">&nbsp;&nbsp; </SPAN></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;</SPAN>// 
            OVERLAPPED结构实始化为0<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">memset(&amp;overlap, 
            0, sizeof(overlap));<o:p></o:p></SPAN></B></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><B><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//指定文件位置是1500;<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; 
            </SPAN></SPAN></B><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">overlap.Offset 

⌨️ 快捷键说明

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