• 6561阅读
  • 5回复

[提问]qt  信号和槽 如何自定义添加  帖子乱了 也删除不了  很抱歉 [复制链接]

上一主题 下一主题
离线liyingju001
 

只看楼主 倒序阅读 楼主  发表于: 2014-05-23
简单说下项目,发出采集命令后会接收到返回的数据,解析后将直接发出采集下一个传感器的命令,所有的传感器编号存在vector,但是有一个问题就是万一某一个传感器坏了,没有返回数据,那么包括这个传感器在内的传感器将不会再有数据写入,其实之后的传感器是能工作的,因此想修改下结构。发出采集命令后能发射一个信号开始计时,超过十秒没回来数据就采集下下条。这个代码怎么写啊??好吧,直接问代码怎么写,确实有点俗。但是十秒之内回来数据,正常工作。
  1. void [backcolor=#f7f7f7][color=#000000] QTcpSocketThread::run()[/color][/backcolor]
  2. [backcolor=#f7f7f7][color=#000000]{[/color][/backcolor]
  3. ...............
  4. [backcolor=#f7f7f7][color=#000000]}[/color][/backcolor]
  5. void QTcpSocketThread::procHartSensorPkg()
  6. {
  7.     Q[backcolor= transparent]Sensor* sensor = sensorsVector.at(currentQueryIndx);[/backcolor]
  8. [backcolor= transparent]。。。。。//解析省略[/backcolor]
  9. [backcolor= transparent] currentQueryIndx += 1;[/backcolor]
  10. [backcolor= transparent] sendQuerySensorValueCmd();//采[/backcolor]集下一个传感器数据
  11. //想再次添加一个信号,一但采集命令发出,就发出这个信号,十秒内收到此INDEX返回的数据,
  12. //就按原定程序继续执行,但是没有返回,就index加1后发出采集下下传感器命令
  13. [backcolor= transparent]}[/backcolor]
  14. [backcolor= transparent]void QTcpSocketThread::sendQueryValueCmd()//[/backcolor][backcolor= transparent][font=Verdana]{[/font][/backcolor][backcolor= transparent][font=Verdana]    if(qureyReady)[/font][/backcolor][backcolor= transparent][font=Verdana]    {[/font][/backcolor][backcolor= transparent][font=Verdana]     ..............[/font][/backcolor][font=Verdana][backcolor= transparent]      [/backcolor][backcolor= transparent]qDebug[/backcolor][backcolor= transparent]()<<[/backcolor][backcolor= transparent]"sendQuerycmd10:"[/backcolor][backcolor= transparent]<<[/backcolor][backcolor= transparent]cmdBuffer[/backcolor][backcolor= transparent].[/backcolor][backcolor= transparent]toHex[/backcolor][backcolor= transparent]()<<[/backcolor][backcolor= transparent]endl[/backcolor][backcolor= transparent];[/backcolor][/font][backcolor= transparent][font=Verdana]    }[/font][/backcolor][backcolor= transparent][font=Verdana]    //在此处emit一个信号,使能某个函数开始计时,请问此处怎么写??[/font][/backcolor][backcolor= transparent][font=Verdana]}[/font][/backcolor]





离线dragon_fly

只看该作者 1楼 发表于: 2014-05-23
用QTimer监控
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(....));
timer->start(10000);
离线realfan

只看该作者 2楼 发表于: 2014-05-23
bool    waitForReadyRead(int msecs)
可以用这个试一下
离线no2101

只看该作者 3楼 发表于: 2014-05-25
emit signal_**(**)试一试
天之豹
离线liyingju001

只看该作者 4楼 发表于: 2014-05-26
回 realfan 的帖子
realfan:bool    waitForReadyRead(int msecs)
可以用这个试一下 (2014-05-23 17:22) 

加在哪合适  
离线realfan

只看该作者 5楼 发表于: 2014-05-26
回 liyingju001 的帖子
liyingju001:加在哪合适    (2014-05-26 16:25) 

在读数据的地方,
if(waitForReadyRead(10000))
{
     //有数据可以读
}
else
{
    //10秒钟仍没有数据可以读
}
快速回复
限100 字节
 
上一个 下一个