Qt 有没有系统级的定时器
例如
全局变量
int state;
QTimer *timer;
------------------------
timre = new QTimer;
connect(timer,SIGNAL(timeout()),this,SLOT( myfun()));
timer->start(1000);
void myfun()
{
state=1;
timer->start(1000);
}
------------------------
state = 0;
while(state != 1)
{
usleep(10000);
}
如上代码所示,我在同一个线程内创建了一个定时器, 然后执行到while()循环,现在问题是因为是在一个线程中的代码,当执行到while()语句的时候,程序一直循环,根本相应不了定时器的信号。
1、我想问下qt编程里有没有系统级别的定时器,同线程内和while循环不冲突。
2、有没有什么更好的解决上述问题的方法, 比如多线程里定时。
[解决办法]
没有,对于耗时操作要放到次线程中处理,否则不但是定时器,就连界面也会卡死的。
[解决办法]
> 1、我想问下qt编程里有没有系统级别的定时器,同线程内和while循环不冲突。
没有
因为Qt里面的timeout是一个signal,如果Qt无法进入事件循环,自然无法发出这个signal
> 2、有没有什么更好的解决上述问题的方法, 比如多线程里定时。
同一个线程只能做一件事情,要么在事件循环中等待信号或者其他事件,要么正在执行某段代码
如果正在执行某段代码,是不可能立刻跳转到信号的处理中的,必须要等到进入事件循环中进行处理才行
你的代码不应该执行sleep操作,这是错误的。你只需要进入事件循环就好了。