时钟100%可靠吗?
本帖最后由 hs999xl 于 2024-6-12 08:28 编辑举个例子:
时钟.时钟周期=1000
周期事件=输出当前时间=xx时xx分xx秒
问问:
1、时钟一定每秒钟会输出一次吗?
2、如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.
3、我想实现定时任务,xx时xx分执行一个方法,大佬们有什么经验吗?
如果你要以普朗克时间为基准的话,时钟显然是不可靠的。
但以时分秒为基准就无所谓了,肯定准。 时钟的计时精度是比较差的,都有15毫秒左右的误差,如果需要高精度的计时,这肯定是不可靠。
然后Windows系统提供给你的时钟有三种:
1、SetTimer(MFC/WTL的时钟组件):周期事件在窗口的消息循环中运行,会阻塞UI线程,周期时间是两次事件中间的时间,必须等上一个周期时间执行完毕,才会计时执行一次周期事件,所以周期事件的耗时会增加到实际的时间间隔中;
2、timeSetEvent(多媒体时钟):单线程模式设计,除了不会阻塞UI线程之外,其他基本一样。由于周期事件在子线程中运行,需要谨慎操作窗口;
3、timer-queue(时钟队列):线程池模式设计,周期事件之间不会互相阻塞,每次事件触发的实际时间间隔是固定的(排除计时误差后);
突然想到一个实现定时任务的方法:
时钟周期事件=根据当前时、分、秒cha询定时任务哈希表,哈希表里存静态方法地址,如果取到就执行。
貌似就实现了时分秒的定时任务。 貌似不太准 界面如果卡了,时钟就不准了吧 如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.
条件允许的话执行事件都丢线程里面去 peeete 发表于 2024-6-13 16:46
如果程序再做耗费资源的任务,会不会导致时钟来不急执行就错过了?.
条件允许的话执行事件都丢线程里面去 ...
听君一席话,省我10本书。 没有100%可靠的计时器,不管用什么方式去实现时钟,都有可能出现延迟
延迟执行也行,就怕错过了时间,代码就不执行了。
页:
[1]