QTime或QTimer等待超时

时间:2012-04-01 04:17:15

标签: qt qt4

我正在写一个Qt应用程序,我有一个四小时循环(在一个单独的线程中)。在那四小时的循环中,我必须:

  1. 使用串口进行处理;
  2. 等一段固定的时间;
  3. 使用串口做更多事情;
  4. 等待任意时间。
  5. 当500ms过去时,做更多的事情;
  6. 转到1.并重复四个小时。
  7. 目前,我这样做的方法非常糟糕,并且会使某些计算机崩溃。我有一大堆代码,但以下代码段基本上显示了问题。 CPU达到~100%并最终导致计算机崩溃。

     void CRelayduinoUserControl::wait(int timeMS)
    {
        int curTime = loopTimer->elapsed();
        while(loopTimer->elapsed() < curTime + timeMS);
    }
    

    在继续使用该程序之前,我需要以某种方式等待一段特定的时间。是否有一些功能可以在保持所有定时器运行的同时等待一段任意时间?

2 个答案:

答案 0 :(得分:1)

如果您想在QT中睡觉,请使用QTimer。只需将定时器的超时信号连接到包含您希望每隔x个时间执行的代码的插槽。

答案 1 :(得分:0)

IMO你应该使用信号/插槽机制,尽管在一段时间内等待。代码可能是这样的:

#define STATE_1 0x01
#define STATE_2 0x02
#define STATE_3 0x03
.....
QTimer * timer  = new QTimer();
connect(timer,SIGNAL(timeout()),SLOT(timerSlot()));
int state = STATE_1 ;
timer->timerSlot()
.... 


void timerSlot() { 
  switch(state) {
    case STATE_1:
      // do stuff with the serial port
      state = STATE_2;
      timer->start(time_to_wait_in_ms);
      break;
    case STATE_2:
      // do more stuff with the serial port
      state = STATE_3;
      timer->start(500);
      break; 
    case STATE_3:
      // do more stuff 
      state = STATE_1;
      timer->start(1000*60*60*4);
      break; 
  }