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

📄 subject_58966.htm

📁 vc
💻 HTM
字号:
<p>
序号:58966 发表者:狂战士 发表日期:2003-11-05 10:44:54
<br>主题:急待解决的问题(苦恼了两天了!)大侠们请帮忙啊,
<br>内容:向设备发送操作命令后,马上提取我所需的数据,可是提取的结果为空的我跟踪调试了一下,发现在读取串口函数中已经有了从设备应答的数据,并已经放入了全局数组中,可是在发送提取函数中却发现该数组却是空的,我是在发送操作命令后进行了Sleep(1000)再进行提取的啊,为什么在这个函数里的全局数组是空的呢???该如何解决啊?<BR>示例如下:<BR>unsigned char* pDataBuf=new unsigned char[4096];// 全局数组<BR>int DataCount=0;// 接受数据的字节数<BR>LRESULT CXXXXXDlg:: OnCommNotify(WPARAM wParam,LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if((wParam&amp;EV_RXCHAR)!=EV_RXCHAR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEvent(m_hPostMsgEvent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0L;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataCount=ReadComm(pDataBuf,4096);//已经有了应答数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEvent(m_hPostMsgEvent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0L;<BR>}<BR>void CXXXXXXDlg::Send_Distill()<BR>{........<BR>.........//向设备发送命令<BR>Sleep(1000);<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>
回复者:狂战士 回复日期:2003-11-05 13:01:09
<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>
回复者:火柴点烟 回复日期:2003-11-05 13:36:48
<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>
回复者:mm2003 回复日期:2003-11-05 14:08:01
<br>内容:只有一种可能:<BR>提取时你的串口函数已经运行了不只1次,数据当然空了<BR>为什么要用这种方法呢?sleep()+查询是实时操作编程中应当极力避免使用的,使用消息机制才是最好的选择。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:狂战士 回复日期:2003-11-05 14:21:33
<br>内容:TO:mm2003<BR>我如果再增加一个按钮,把提取函数放入,点击后就可以正常提取了啊!~<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>
回复者:kevin 回复日期:2003-11-05 17:23:39
<br>内容:如果不是收数据,不一定都收数据,还有是别的事件的可能吧!<BR>用SWITCH --CASE 试试<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>
回复者:红苹果 回复日期:2003-11-05 21:32:45
<br>内容:这样试试:<BR>unsigned char* pDataBuf=new unsigned char[4096];// 全局数组<BR>int DataCount=0;// 接受数据的字节数<BR>LRESULT CXXXXXDlg:: OnCommNotify(WPARAM wParam,LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if((wParam&amp;EV_RXCHAR)!=EV_RXCHAR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetEvent(m_hPostMsgEvent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0L;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( DataCount&lt; 4096 ) // 缓冲区未满继续读&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = pDataBuf+DataCount;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n=ReadComm( p,4096-DataCount);//已经有了应答数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( n&gt;0 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataCount += n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetEvent(m_hPostMsgEvent);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0L;<BR>}<BR>void CXXXXXXDlg::Send_Distill()<BR>{........<BR>.........//向设备发送命令<BR>&nbsp;&nbsp;MSG msg;<BR>&nbsp;&nbsp;for( int i=0;i&lt;100;i++ )<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(GetMessage(&amp;msg,m_hWnd,0,0))&nbsp;&nbsp;// 有机会处理消息CommNotify<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>//---------------进行数据提取------------------//<BR>........//这里的全局数组里却是空的啊???????!!!!!!!<BR>&nbsp;&nbsp;DataCount=0; //取了数据后清0<BR>........<BR>} <BR>2003-11-5 21:33:53

⌨️ 快捷键说明

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