您的位置 首页 资料

定时器与线程的差异

定时器与线程的区别-多线程技术是在控制工程中常用的技术,因为在闭环系统中有着大量的数据处理,这些处理显然不可能放在主线程中处理,绝大多数都是在线程中使用。多线程的优点比较明显,就是把费劲的东西扔到后台去,而且对CPU的利用率比较高。

守时器与线程的差异

1 软件守时器

许多同学在工程中喜爱运用软件守时器,由于其运用简略,仅需设置一个时长和其OnTIme工作即可运用。的确,软件守时器在某些持续性不强的重复性工作中功率仍是不错的,可是也有着很大的缺陷。

缺陷1,速度:软件守时器的精度比较低,这是由Windows不实时的特性所决议的,在XP下,假如封闭一切能封闭的进程,MFC的软件守时器能够到达挨近15ms的精度,而在Win2000下,其能到达挨近10ms的精度。可是实际状况是,有些进程是不能够封闭的,比如说数据库服务器,所以MFC的软件守时器能够到达的精度一般状况下在40ms左右,BCB和delphi就更差一点,大概在55ms左右。QueryPerformanceCounter却是能够大幅进步精度,可是稳定性欠佳。

缺陷2,功率:软件守时器其本质实际上是在音讯循环中处理WM_TIMER音讯,而WM_TIMER音讯在音讯行列中是一个初级其他音讯,所以守时器并不能彻底确保处理时刻距离的准确性。其他,TImer占用的是主线程的资源,看似并行实际上是串行,所以窗体的音讯行列一旦堵塞,就会形成体系假死或许运转缓慢,这关于UI来说几乎是无法忍受的。

2 多线程

多线程技能是在操控工程中常用的技能,由于在闭环体系中有着很多的数据处理,这些处理显着不可能放在主线程中处理,绝大多数都是在线程中运用。多线程的长处比较显着,便是把费力的东西扔到后台去,并且对CPU的利用率比较高。假如操控的好,多线程几乎是没有什么缺陷的,但实际上操控的好的并不多……原因如下:

1、时刻片不可控,抢CPU资源的工作~一般人说不清;

2、同步比较杂乱,简单发生死锁,3条线程同步一般就能把人折腾死。同步我比较喜爱用临界区,原因也很简略:由于临界区比较简略……

多个线程是“一起”履行的多个使命;守时能够看作是在本线程内刺进的使命。

假如需求多个使命一起履行,就要用多线程;假如需求每隔一段时刻做某件事就用守时。多线程相对杂乱一些,占用体系资源略多一些,所以假如能不必多线程时尽量不必。

看项目代码的时分看到他们大部分会用到守时器,有时也会用到线程,究竟线程和守时器有什么差异?

网上看了些解说:

守时器:程序中敞开两个守时器,给人的假象是好像是一起进行。。。。其实不然,便是光秃秃的串行,

除掉守时器的串行运转,以及功率不说,他其实和线程差不多少。

如下看两个守时器的运转:

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。

总结:

所以在运转几个耗时的功用的时分,尽可能的去用线程,而不是守时器,尽管守时器很简略,简单保护。

可是守时器并没有削减程序的运转时刻,以及内存。只不过是代码相关于好写,好保护些罢了.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/345005.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部