标题:QApplication::processEvents();在串口接收循环中使用,对吗?
作者:ycgxy1650601
日期:2017-09-15 19:08
内容:
void MainWindow::SendFrame(char *n, bool m) //发送函数
{
}
void MainWindow::slotReceiveData() //串口接收函数
{
uchar res;
while(p_serial_port->read((char*)&res,1)>0)
{
switch(frame_data[1])
{
case 1:
{
send_frame = Y;
break;
}
case 2:
{
SendFrame(n,m);
while(send_frame!=Y)
{
//程序死在这里,出不来了
QApplication::processEvents(); //循环等待
}
..
#1 [lanliuyi61 09-19 15:50]
你的case1是收到返回信息的情况是吧?
case2是没收到,就一直发是吧?
但你的while里没有延迟啊,至少sleep以下吧,一直发很累的。
而且用waitforreadyread不好么?
嫌阻塞的话,用计时器也可以。
#2 回 lanliuyi61 的帖子 [ycgxy1650601 09-19 22:06]
lanliuyi61:你的case1是收到返回信息的情况是吧?
case2是没收到,就一直发是吧?
但你的while里没有延迟啊,至少sleep以下吧,一直发很累的。
.......(2017-09-19 15:50)
总体结构就是:case2 分支负责发送数据,假如发送成功,下位机会上发到case1,从而使得send_frame=Y;然后返回到case2中进行while()的条件判断(while()循环里面有QApplication::processEvents();),最后退出。我就是不明白是不是QApplication::processEvents();用的不对啊。
waitforreadyread没用过,我去找找。
#3 回 lanliuyi61 的帖子 [ycgxy1650601 09-19 23:30]
lanliuyi61:你的case1是收到返回信息的情况是吧?
case2是没收到,就一直发是吧?
但你的while里没有延迟啊,至少sleep以下吧,一直发很累的。
....... (2017-09-19 15:50)
我网上查了一下waitforreadyread(阻塞,直到输出通道中的新数据可读),如果用这个函数,上位机界面上同时产生的其他事件处理不了?
#4 回 ycgxy1650601 的帖子 [lanliuyi61 09-20 09:33]
ycgxy1650601:总体结构就是:case2 分支负责发送数据,假如发送成功,下位机会上发到case1,从而使得send_frame=Y;然后返回到case2中进行while()的条件判断(while()循环里面有QApplication::processEvents();),最后退出。我就是不明白是不是QApplicati .. (2017-09-19 22:06)
你具体的情况我不好分析,建议你自己用DEBUG一句一句的看。
另外,不想阻塞的话就用定时器。
慢慢学,多看例子。
再另外,注意到你是在网上找到的waitreadyread。你应该不会用的QT自带的帮助文档,对着随便一个类的名字按F1试试吧。
#5 回 lanliuyi61 的帖子 [ycgxy1650601 09-20 09:38]
lanliuyi61:你具体的情况我不好分析,建议你自己用DEBUG一句一句的看。
另外,不想阻塞的话就用定时器。
.......(2017-09-20 09:33)
好的,谢谢!