|
5Qter豆
我程序里面qt上位机向电路发送命令,然后需要在有效的时间对串口接收到得电路反馈进行处理。但是我用qtime类写出来的是一个死循环。不知道哪里写错了,或者谁有更好的解决办法,请不灵赐教,小弟感激不尽。
timer = new QTimer(this);
timerFlag =false;
endFlag=false;
reapt.clear();
connect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
timer->start(1000);
while(1)
{
if(timerFlag == true)break;//超时退出
if(endFlag == true)
{
timer->stop();
disconnect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
delete timer;
}
}
//if(endFlag == true)
{
insertRow(currentRow);
{
reapt.remove(0,2);
QTableWidgetItem *deciveNameItem = new QTableWidgetItem(reapt);
setItem(currentRow,0,deciveNameItem); //设备名称
QTableWidgetItem *portNameItem = new QTableWidgetItem(info.portName());
setItem(currentRow,1,portNameItem); //端口名称
QTableWidgetItem *descriptionItem = new QTableWidgetItem(info.description());
setItem(currentRow,2,descriptionItem); //端口类型
QTableWidgetItem *BusyItem = new QTableWidgetItem((info.isBusy() ? QObject::tr("Yes") : QObject::tr("No")));
setItem(currentRow,3,BusyItem); //端口状态
currentRow++;
}
}
myCom->close(); //关闭串口
delete myCom; //垃圾回收
void ConnectDialog::readMyCom()//读串口函数
{
QByteArray temp;
temp = myCom->readAll();
if(!((temp.isEmpty())|(temp.isNull())))
{
reapt.append(QString(temp));
if((!reapt.startsWith("Ok"))&&(reapt.size()>=2))reapt.clear();
if(reapt.endsWith('\n'))endFlag = true;
}
}
void ConnectDialog::timerDone()//超时处理函数
{
timerFlag=true;
disconnect(timer,SIGNAL(timeout()),this,SLOT(timerDone()));
delete timer;
} |
最佳答案
查看完整内容
camelback5兄:
因为从你讲的和写的程序,暂无法看出上位机需对下位机的电路反馈信号是如何处理的,
是要求同步处理,或是要求异步处理?
我们的做法是:
1、如果不需要实时处理下位机电路反馈信号,允许有一定的延时的此类工作环境,
我们会采取间隔一定时长进行处理方式,具体如下:
delayTime = 2 ; // 延迟2秒
while(1)
{ // 进入循环
/* 延迟 delayTime 指定的秒数 */
QElapsedTimer TL_t;
...
|