📄 subject_26175.htm
字号:
<p>
序号:26175 发表者:赵付强 发表日期:2002-12-29 18:24:15
<br>主题:真是奇怪?大家帮忙看看这段代码!
<br>内容://buf_Op为串口通讯协议字符串 <BR> for(i=0;i<3;i++){<BR> ::WriteCommBlock(m_comSerial,buf_Op,8);///发送字符串命令<BR> ::GetLocalTime(&st);<BR> sec1=st.wSecond;<BR> ii=0;<BR> while(ii<2){<BR> ::GetLocalTime(&st);<BR> sec2=st.wSecond;<BR> if(sec1!=sec2){<BR> sec1=sec2;<BR> ii++;<BR> }<BR> if(g_bOp_Pause==TRUE)<BR> return ;<BR> }<BR> }<BR>我的本意是想在命令串发送之后,再在响应函数中将代表该命令是否已接收的全局状态标识g_bOp_Pause变量定为TRUE(发送前是FALSE),然后让发送命令串的代码下面的程序来检验是否发送成功。(每次时限两秒)<BR>如果g_bOp_Pause=FALSE,发送不成功,<BR>再发送该命令串;<BR>如果成功即标识g_bOp_Pause==TRUE时跳出循环体。<BR><BR>本来一般情况下,一次即可发送成功,<BR>速度很快,<BR>而当添加上上面的代码后,<BR>反而使响应函数响应的很慢,甚至影响其他事件的进行。<BR>这是什么原因呢?<BR>应该如何解决?<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:bb 回复日期:2002-12-30 11:14:15
<br>内容:while(ii<2)<BR>{<BR>....<BR>}<BR>这个循环在一秒钟之内不知循环了多少次,大量CPU时间消耗在循环中,<BR>使得其他代码没有机会执行。<BR><BR>方法1.(上述代码相同功能)<BR> <BR>Sleep(2000);<BR>if(g_bOp_Pause==TRUE)<BR> return ;<BR><BR>方法2.(优化方案之一)(尽快检测原则)<BR>while(g_bOp_Pause!=TRUE)<BR>{<BR> Sleep(100);//Sleep参数应该>50ms,个人认为此种情况下100为优<BR>}<BR>return;<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:cool 回复日期:2002-12-30 16:00:55
<br>内容:我认为最好不要用这种方式,这样的话很浪费时间。<BR><BR>我写串口通讯程序的时候,判断在间隔时间后是否传输正确用的是激活计数器,隔X秒后自动激活相应处理流程。用MFC的话,可以重载WM_TIMER,然后在OnTimer()中处理错误信息。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bb 回复日期:2002-12-30 16:14:51
<br>内容:楼上,不错。<BR>但不知楼主程序结构为何。OnTimer不一定适用。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -