定时器与线程的区别

看项目代码的时候看到他们大部分会用到定时器,有时也会用到线程,到底线程和定时器有什么区别?

网上看了些解释:

定时器:程序中开启两个定时器,给人的假象是好像是同时进行。。。。其实不然,就是赤裸裸的串行,

除去定时器的串行运行,以及效率不说,他其实和线程差不多少。

如下看两个定时器的运行:

    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张图片

在定时器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。

总结:

所以在运行几个耗时的功能的时候,尽可能的去用线程,而不是定时器,虽然定时器很简单,容易维护。

但是定时器并没有减少程序的运行时间,以及内存。只不过是代码相对于好写,好维护些而已.















你可能感兴趣的:(QT,c++)