• 3175阅读
  • 1回复

[提问]串口接收数据并弹窗,在不同电脑运行不同 [复制链接]

上一主题 下一主题
离线donglaile
 

只看楼主 倒序阅读 楼主  发表于: 2016-11-10
使用qextserial写一个串口程序,在接收到数据后,进入到readyread信号连接的槽函数进行数据解析,并在此弹出一个QDialog提示窗口
在我的电脑运行没有任何问题,放到另一台电脑运行,接收到串口数据并弹出窗口,再关闭弹出窗口后就导致cpu占用率超过50%,软件也变得非常卡,ui界面切换时,界面不刷新,这时通过串口随便发送一个数据给软件,又恢复正常。请问大家这是什么原因?
初始化程序
  1. void SerialProtocol::initSerial()
  2. {
  3.     mPort = new QextSerialPort(mComName,QextSerialPort::EventDriven);
  4.     mPort->setBaudRate((BaudRateType)BAUD19200);
  5.     mPort->setDataBits(DATA_8);
  6.     mPort->setParity(PAR_NONE);
  7.     mPort->setStopBits(STOP_1);
  8.     mPort->setFlowControl(FLOW_OFF);
  9.     mIsOpen = mPort->open(QIODevice::ReadWrite);
  10.     if(!mIsOpen){
  11.         return;
  12.     }
  13.     qDebug() << __FILE__ << __LINE__;
  14.     qDebug() << QString("%1 is open!").arg(mComName);
  15.     connect(mPort, SIGNAL(readyRead()), this, SLOT(onFrameAvailable()));
  16. }
接收槽函数:
  1. void SerialProtocol::onFrameAvailable()
  2. {
  3.     QByteArray ba = mPort->readAll();
  4.    emit sigRec(ba);
  5.     QDialog *dl = new QDialog;
  6.     dl->resize(300,200);
  7.     dl->exec();
  8.     delete dl;
  9. }


离线tmxfh

只看该作者 1楼 发表于: 2016-11-29
可考虑一下在弹出后,暂停工作线程试试。估计在弹出窗口后,线程被阻塞
哥来了
快速回复
限100 字节
 
上一个 下一个