首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTime或QTimer等待超时

QTime或QTimer等待超时
EN

Stack Overflow用户
提问于 2012-04-01 04:17:15
回答 2查看 8.8K关注 0票数 1

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

  1. 用串口做些事情;
  2. 等待一段固定的时间;
  3. 用串口做更多的事情;
  4. 等待一段任意的时间。
  5. 当超过500毫秒时,做更多的事情;
  6. 转到1,然后重复四个小时。

目前,我的方法是非常糟糕的,并使一些计算机崩溃。我有大量的代码,但是下面的代码片段基本上显示了问题。CPU达到100%,最终会使计算机崩溃。

代码语言:javascript
运行
复制
 void CRelayduinoUserControl::wait(int timeMS)
{
    int curTime = loopTimer->elapsed();
    while(loopTimer->elapsed() < curTime + timeMS);
}

我需要等待一段特定的时间才能继续执行这个程序。在保持所有计时器运行的同时,是否有什么函数只需要等待一段任意的时间呢?

EN

回答 2

Stack Overflow用户

发布于 2012-04-01 05:29:30

如果您想睡QT,请使用QTimer。只需将超时信号从计时器连接到包含您想要执行的代码的时隙,就可以完成每次x次的计时。

票数 1
EN

Stack Overflow用户

发布于 2012-04-02 13:07:06

海事组织,您应该使用信号/插槽机制,尽管在内部等待了一段时间。代码可以是这样的:

代码语言:javascript
运行
复制
#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; 
  }  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9961876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档