看项目代码的时候看到他们大部分会用到定时器,有时也会用到线程,到底线程和定时器有什么区别?
网上看了些解释:
定时器:程序中开启两个定时器,给人的假象是好像是同时进行。。。。其实不然,就是赤裸裸的串行,
除去定时器的串行运行,以及效率不说,他其实和线程差不多少。
QTimer *time=new QTimer;
time->start(2000);
connect(time,SIGNAL(timeout()),this,SLOT(slot_time1()));
QTimer *time1=new QTimer;
time1->start(3000);
connect(time1,SIGNAL(timeout()),this,SLOT(slot_time2()));
void MainWindow::slot_time1()
{
qDebug()<<"------------------time1-------------------";
for(int i=0;i<30000;i++)
{
for(int n=0;n<65000;n++)
{
;
}
}
qDebug()<<"-------------------------------------------";
}
void MainWindow::slot_time2()
{
qDebug()<<"***********************time2****************";
for(int i=0;i<60000;i++)
{
for(int n=0;n<65000;n++)
{
;
}
}
qDebug()<<"********************************************";
}
在定时器1触发的时候,里面加入延迟,要是线程的话,马上就会运行第二个线程,但是定时器不是,直到第一个运行完毕,才会运行别的。
mythread *th=new mythread;
th->start();
mythread1 *th1=new mythread1;
th1->start();
void mythread::run()
{
qDebug()<<"------------------time1-------------------";
this->sleep(2);
qDebug()<<"-------------------------------------------";
}
void mythread1::run()
{
qDebug()<<"********************time2*************************";
this->sleep(4);
qDebug()<<"**********************************************";
}
程序开始线运行线程2,进行4s延迟,在这期间,并没有阻塞,而是去运行线程1 2s过后,再回到线程2。
所以在运行几个耗时的功能的时候,尽可能的去用线程,而不是定时器,虽然定时器很简单,容易维护。
但是定时器并没有减少程序的运行时间,以及内存。只不过是代码相对于好写,好维护些而已.