定时器与线程的区别.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
定时器与线程的区别 定时器与线程的区别 1 软件定时器 很多同学在工程中喜欢使用软件定时器,因为其使用简单,仅需设置一个时长和其On Time事件即可使用。确实,软件定时器在某些持续性不强的重复性工作中效率还是不错的,但是也有着很大的缺点。 缺点1,速度:软件定时器的精度比较低,这是由Windows不实时的特性所决定的,在XP下,如果关闭所有能关闭的进程,MFC的软件定时器可以达到接近15ms的精度,而在Win2000下,其能达到接近10ms的精度。但是实际情况是,有些进程是不可以关闭的,比如说数据库服务器,所以MFC的软件定时器能够达到的精度一般情况下在40ms左右,BCB和delphi就更差一点,大概在55ms左右。QueryPe rf ormanceCoun ter倒是可以大幅提 高精度,但是稳定性欠佳。 缺点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触发的时候,里面加入延迟,要是线程的话,马上就会运行第二个线程,但是定时器不是,直到第一个运行完毕,才会运行别的。 再看线程: mythre ad *th=new mythread; th-》start(); mythread1 *th1=new mythread1; th1-》start(); void mythread::run() { qDebug()《《“------------------time1-------------------”; this-》sleep(2); qDebug()《《“-------------------------------------------”; } void mythread1::run()

文档评论(0)

man9872 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档