头都想痛了,没找出什么原因来! 有一个硬件设备(示波器),需要通过rs232来进行通信,它是命令响应式的,就是发一个命令,就回一个数据包,我用readfile的方式读回来,如果连续两次发送命令过去的话,就会导致第二次发送的命令没响应,必须中间加一个messagebox之类的东西弹出来才能让第二个命令正常回报信息!
原因大概是那个读写串口的线程借此机会可以处理第二个命令,我用sleep多少秒都没用,一定要messagebox这种中断性质的方式才行! 我试图提高那个读写串口的优先级或者挂起主界面线程,都无济于事!
如果用mscomm控件来做的话,一点问题都没有,但我还是想用api的方式来完成,希望有这方面经验的高手帮我分析一下原因!不胜感谢!
原因大概是那个读写串口的线程借此机会可以处理第二个命令,我用sleep多少秒都没用,一定要messagebox这种中断性质的方式才行! 我试图提高那个读写串口的优先级或者挂起主界面线程,都无济于事!
如果用mscomm控件来做的话,一点问题都没有,但我还是想用api的方式来完成,希望有这方面经验的高手帮我分析一下原因!不胜感谢!
Read232();
Sleep
SendCmd();
Read232();
试试
http://www.vckbase.com/code/findcode.asp
我的方式就是
SendCmd();
Read232();
Sleep
SendCmd();
Read232();
第二次的 发送指令根本得不到响应,一直等,等几十秒都没用,说明不是时间的问题!
但是如果把sleep换成MessageBox,就可以了,第二次发送的命令可以得到正确响应!
我觉得问题的关键是这里,为什么sleep和Messagebox会有这种差别,有什么其它的方法完成它吗?我总不可能在测试的过程中,总是让用户点那个MessageBox的确定!
void Sleep(long lms)
{
long lstart=GetTickCount();
while(GetTickCount()-lstart<lms)
{
while(PeekMessage(&msg,NULL,0,0,1))
{
//处理消息以使外部程序可以响应事件
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
WriteFile后,等待,ReadFile,再WriteFile,等待,ReadFile