📄 chap12_3.htm
字号:
95/NT</font><font SIZE="3">中,</font><font FACE="Times New Roman" SIZE="3">WM_COMMNOTIFY</font><font SIZE="3">消息已经取消,在串行口产生一个通信事件时,程序并不会收到通知消息。线程需要调用</font><font FACE="Times New Roman" SIZE="3">WaitCommEvent</font><font SIZE="3">函数来监视发生在串行口中的各种事件,该函数的第二个参数返回一个事件屏蔽变量,用来指示事件的类型。线程可以用</font><font FACE="Times New Roman" SIZE="3">SetCommMask</font><font SIZE="3">建立事件屏蔽以指定要监视的事件,表</font><font FACE="Times New Roman" SIZE="3">12.4</font><font SIZE="3">列出了可以监视的事件。调用</font><font FACE="Times New Roman" SIZE="3">GetCommMask</font><font SIZE="3">可以查询串行口当前的事件屏蔽。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
<p ALIGN="CENTER">表</font><font FACE="Times New Roman" SIZE="3">12.4 </font><font SIZE="3">通信事件</font></b></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
<tr>
<td WIDTH="35%"><font SIZE="3"><b><p ALIGN="JUSTIFY">事件屏蔽</b></font></td>
<td WIDTH="65%"><font SIZE="3"><b><p ALIGN="JUSTIFY">含义</b></font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_BREAK</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">检测到一个输入中断</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_CTS</font></td>
<td WIDTH="65%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CTS</font><font SIZE="3">信号发生变化</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_DSR</font></td>
<td WIDTH="65%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">DSR</font><font SIZE="3">信号发生变化</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_ERR</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">发生行状态错误</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_RING</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">检测到振铃信号</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_RLSD</font></td>
<td WIDTH="65%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">RLSD(CD)</font><font SIZE="3">信号发生变化</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_RXCHAR</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">输入缓冲区接收到新字符</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_RXFLAG</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">输入缓冲区收到事件字符</font></td>
</tr>
<tr>
<td WIDTH="35%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">EV_TXEMPTY</font></td>
<td WIDTH="65%"><font SIZE="3"><p ALIGN="JUSTIFY">发送缓冲区为空</font></td>
</tr>
</table>
<font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">WaitCommEvent</font><font SIZE="3">即可以同步使用,也可以重叠使用。如果串口是用</font><font FACE="Times New Roman" SIZE="3">FILE_FLAG_OVERLAPPED</font><font SIZE="3">标志打开的,那么</font><font FACE="Times New Roman" SIZE="3">WaitCommEvent</font><font SIZE="3">就进行重叠操作,此时该函数需要一个</font><font FACE="Times New Roman" SIZE="3">OVERLAPPED</font><font SIZE="3">结构。线程可以调用等待函数或</font><font FACE="Times New Roman" SIZE="3">GetOverlappedResult</font><font SIZE="3">函数来等待重叠操作的完成。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">当指定范围内的某一事件发生后,线程就结束等待并把该事件的屏蔽码设置到事件屏蔽变量中。需要注意的是,</font><font FACE="Times New Roman" SIZE="3">WaitCommEvent</font><font SIZE="3">只检测调用该函数后发生的事件。例如,如果在调用</font><font FACE="Times New Roman" SIZE="3">WaitCommEvent</font><font SIZE="3">前在输入缓冲区中就有字符,则不会因为这些字符而产生</font><font FACE="Times New Roman" SIZE="3">EV_RXCHAR</font><font SIZE="3">事件。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果检测到输入的硬件信号(如</font><font FACE="Times New Roman" SIZE="3">CTS</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">RTS</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CD</font><font SIZE="3">信号等)发生了变化,线程可以调用</font><font FACE="Times New Roman" SIZE="3">GetCommMaskStatus</font><font SIZE="3">函数来查询它们的状态。而用</font><font FACE="Times New Roman" SIZE="3">EscapeCommFunction</font><font SIZE="3">函数可以控制输出的硬件信号(如</font><font FACE="Times New Roman" SIZE="3">DTR</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">RTS</font><font SIZE="3">信号)。</font><font FACE="Times New Roman" SIZE="3"></p>
</font><div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap12_2.htm">上一页</a></td>
<td><p align="right"><a href="chap12_4.htm">下一页</a></td>
</tr>
</table>
</center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font></td>
<b>
</tr>
</table>
</center></div>
<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -