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

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

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            style="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>P172-P173你是否会有这种感觉呢?);<o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN 
            style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">但<B><SPAN 
            lang=EN-US style="COLOR: red">I/O Completion Ports</SPAN><SPAN 
            lang=EN-US> </SPAN></B>好像很难理解,我试着从自己理解的角度来写写心得(也许不对);<SPAN 
            lang=EN-US><o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><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></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><B><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">I/O 
            Completion Ports</SPAN></B><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">看作容器,那么在这个容器中放置若干个线程(书上说最好是<SPAN 
            lang=EN-US>cpu个数*2+2),这些个线程</SPAN></SPAN><B><SPAN 
            style="COLOR: blue; 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>I/O请求。<o:p></o:p></SPAN></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"><SPAN 
            style="FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">为什么<B><SPAN 
            lang=EN-US style="COLOR: red">I/O Completion Ports</SPAN></B><SPAN 
            style="COLOR: black">会很有效率?我是这样想的:首先容器中保持的线程可以随时承担服务<SPAN 
            lang=EN-US>I/O请求的任务,其主要特点是:</SPAN></SPAN><B><SPAN 
            style="COLOR: blue">两个线程在不同的时间可以服务同一个<SPAN 
            lang=EN-US>I/O请求</SPAN></SPAN></B><SPAN style="COLOR: black">;<SPAN 
            lang=EN-US><o:p></o:p></SPAN></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"><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><B><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">I/O 
            Completion Ports</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"><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>P179有一个</SPAN></SPAN><SPAN 
            style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">操作概观</SPAN><SPAN 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">:对着它,我来解释书上</SPAN><B><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">I/O 
            Completion Ports </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"><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: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//注意:一定要对着书,把下面用到的WIN32函数的每个参数的含义弄清楚,这很重要<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//――――――产生一个I/O 
            completion port<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">①</SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: red; 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"><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;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//构造一个I/O 
            completion port<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"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: #993300; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">ghCompletionPort 
            </SPAN><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">= 
            CreateIoCompletionPort(<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"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>INVALID_HANDLE_VALUE,<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 63.75pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">NULL,<SPAN 
            style="mso-spacerun: yes">&nbsp; </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//不使用任何port 
            <o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 63.75pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">0,<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><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>//这个参数用于在线程间传递参数,此时设为空<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"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>0<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><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>// 
            使用默认的线程数<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 63.75pt"><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; TEXT-INDENT: 63.75pt"><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 lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//――――――让它和一个文件handle产生关联<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN></SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">②</SPAN></B><B><SPAN 
            lang=EN-US 
            style="COLOR: red; 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"><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;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//将socket关联到</SPAN><SPAN 
            lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">①</SPAN><SPAN 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">产生的<SPAN 
            lang=EN-US>I/O completion 
            port,那么以后发生在这个socket<o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-char-indent-size: 9.0pt"><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//上的任何I/O操作,都由此I/O 
            completion port中的线程处理<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-char-indent-size: 9.0pt"><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">CreateIoCompletionPort( 
            (HANDLE)newsocket, </SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//注意,这里是socket;原因见书P184<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-char-indent-size: 9.0pt"><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><SPAN 
            lang=EN-US 
            style="COLOR: #993300; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">ghCompletionPort</SPAN><SPAN 
            lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">, 
             </SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//指定的I/O 
            completion port</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; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-char-indent-size: 9.0pt"><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)</SPAN><SPAN lang=EN-US 
            style="COLOR: #ff6600; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">pKey</SPAN><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><SPAN 
            lang=EN-US 
            style="COLOR: green; 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; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-char-indent-size: 9.0pt"><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; 
            </SPAN>0<SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">// 
            使用默认的线程数</SPAN><SPAN lang=EN-US 

⌨️ 快捷键说明

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