我正在编写一个Qt应用程序,我有一个四小时的循环(在一个单独的线程中)。在这四个小时的循环中,我必须:
- 使用串行端口
- 等待一段固定的时间
- 用串行端口做更多的事情
- 等待任意时间
- 当500毫秒过去时,做更多的事情
- 转到1。并重复四个小时
目前,我做这件事的方法真的很糟糕,导致一些电脑崩溃。我有一大堆代码,但下面的代码片段基本上显示了这个问题。CPU达到约100%,最终可能导致计算机崩溃。
void CRelayduinoUserControl::wait(int timeMS)
{
int curTime = loopTimer->elapsed();
while(loopTimer->elapsed() < curTime + timeMS);
}
在继续这个程序之前,我需要等待一段特定的时间。有没有什么功能可以在保持所有计时器运行的同时等待一段任意的时间?
如果您想在QT中睡眠,请使用QTimer。只需将计时器的超时信号连接到包含您想每隔x段时间执行的代码的插槽即可。
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;
}