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

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

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            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;&nbsp;&nbsp; 
            </SPAN>);<SPAN style="mso-tab-count: 1">&nbsp; 
            </SPAN><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: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">/* 
            pKey,用于记录在newsocket上发生的操作,</SPAN><SPAN 
            style="COLOR: blue; 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><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 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">,此结构中保存从客户端读入的数据和写回客户的数据<SPAN 
            lang=EN-US>*/</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; 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-tab-count: 1"></SPAN><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">//――――――产生一堆线程<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: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">CreateWorkerThreads();<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">&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">//――――――下面是</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">、</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: red; 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">//下面这段代码在线程函数ThreadFunc中<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US 
            style="COLOR: blue; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">for 
            (;;)<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt"><SPAN lang=EN-US 
            style="COLOR: blue; 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"><B><SPAN lang=EN-US 
            style="COLOR: red; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//――――――让每一个线程都在completion 
            port上等待<SPAN 
            style="mso-spacerun: yes">&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">④</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"><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></SPAN><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">//下面这个函数相当于WaitForSingleObject;[提醒一下:这种等待不是忙等待]<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"><SPAN 
            style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>//当一个线程读操作完成后,此函数返回<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><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;&nbsp; </SPAN><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">bResult 
            = GetQueuedCompletionStatus(<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; 
            </SPAN></SPAN><SPAN lang=EN-US 
            style="COLOR: #993300; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">ghCompletionPort,<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">//指定在哪一个端口上等待<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; 
            </SPAN>&amp;dwNumRead,<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; 
            </SPAN>&amp;(DWORD)</SPAN><SPAN lang=EN-US 
            style="COLOR: #ff6600; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt"> 
            pCntx,</SPAN><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">//一个指针,收到CreateIoCompletionPort所定义的key<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; 
            </SPAN>&amp;lpOverlapped,<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; 
            </SPAN>INFINITE<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; 
            </SPAN>);<o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">/*说明:</SPAN><SPAN 
            lang=EN-US 
            style="COLOR: #ff6600; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">pCntx</SPAN><SPAN 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">就是<SPAN 
            lang=EN-US>CreateIoCompletionPort()中参数pkey;读出的数据被指定放入<o:p></o:p></SPAN></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">pkey-&gt;InBuffer中 
            ,仔细看看程序代码及p183的叙述,</SPAN><SPAN 
            style="COLOR: olive; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">你就会发现在<B><SPAN 
            lang=EN-US>I/O Completion Ports<o:p></o:p></SPAN></B></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B><SPAN 
            style="COLOR: olive; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">中的线程是通过</SPAN></B><SPAN 
            lang=EN-US 
            style="COLOR: olive; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">pkey来判别不同的客户端的</SPAN><SPAN 
            lang=EN-US 
            style="COLOR: green; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">*/</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 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"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN 
            style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>if (bResult==读完 
            )<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: 2">&nbsp;&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">//将读出的数据保存到pCntx-&gt;OutBuffer中<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 9pt; mso-char-indent-count: 1.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">//</SPAN><SPAN 
            lang=EN-US 
            style="COLOR: black; 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>pCntx-&gt;nOutBufIndex记录着当前客户端已读出的数据的位置<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"><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>char *pch = 
            &amp;pCntx-&gt;OutBuffer[pCntx-&gt;nOutBufIndex++];<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>*pch++ = pCntx-&gt;InBuffer[0];<o:p></o:p></SPAN></P>
            <P class=MsoNormal 
            style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 54pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT-FAMILY: 宋体; FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt">*pch 
            = '\0'; <o:p></o:p></SPAN></P>
            <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
            style="COLOR: black; FONT

⌨️ 快捷键说明

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