`
- 浏览:
275562 次
- 性别:
- 来自:
上海
-
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条线程同步一般就能把人折腾死。同步我比较喜欢用临界区,原因也很简单:因为临界区比较简单……
多个线程是“同时”执行的多个任务;定时可以看作是在本线程内插入的任务。
如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
vc定时器和多线程的简单应用,多线程的执行效率好象更高~~~
C#多线程实现定时器
MFC中利用多线程实现定时器,对于学习多线程和 ontimer的同学有用
使用多媒体定时器创建多个线程周期性的工作,线程工作可完全由“类”描述。
c#定时器+多线程,定时更新数据 定时器方法,可发送定时邮件
Linux中通过多线程多定时器来完成不同的任务;Linux中通过多线程多定时器来完成不同的任务;
定时器、创建主线程、子线程
Spring3.0 mvc 定时器及多线程任务demo
个人简单设计的定时器与线程的使用,简单明了,适用于C++初学者
NULL 博文链接:https://heisetoufa.iteye.com/blog/1684467
定时器与多线程任务调度器使用定时器与多线程任务调度器使用
通过简单例子实现多线程,把界面和数据计算分开,又在其中运用定时器
java多线程和定时器学习,代码和文档都有,很详细
java定时器、多线程(池)、java队列的demodemo,下载看看看吧
CVI学习文件-多线程 异步定时器(修改增加学习版)
java定时器+多线程(池)+java队列Demo
多线程定时器包括Web和Winform两个版本。
多线程的自动管理(定时器)_C#多线程的自动管理(定时器)_C#
基于QT的多线程定时器 完全免费 需要的兄弟们可以自行下载。
通过多线程实现定时器,定时启动多线程,并且带有参数,threadtimer为定时器,main为主程序,可以按照间隔启动多线程