关于网友提出的“一个关于时钟的延迟问题”问题疑问,本网通过在网上对“一个关于时钟的延迟问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:一个关于时钟的延迟问题
描述: 有这样一个项目,其在一天的很多个固定时间点执行一些逻辑,比如在8:10、8:13、8:15、9:02、9:08、9:09、
10:01、10:18..................
获取本地时间肯定是不行的,因为项目不可能因为用户修改电脑时间而影响使用。现在就是获取网络时间的问题,如果在一天中的时间点很多,高频率地去获取网络时间,是不是影响效率呢,既占带宽,又占CPU的。
有没有这样一种可能,就是项目在启动之初,就获取一次网络时间,然后,在内存中有一个时钟,从获取到网络时间开始就走,之后,就直接从这个内存时钟获取北京时间,这样行不行呢?该如何做呢?
本人按照这个帖子:CSDN的1楼朋友的办法,定义一个datetime dt 变量,初始化的时候请求服务修改变量为北京时间..
实例化timer 1s执行一次.
dt=dt.add秒(1);
以后取值的判断 直接拿dt就行了..
但是,我按照这种办法进行了测试,开始还行,时间长了,dt的时间和网络时间就对不上了,十几分钟的话,就会相差十几秒,这个对项目的影响就大了。
在此贴,寻求更好的办法
解决方案1: 1、项目在启动之初,就获取一次网络时间和本地时间。
2、计算本地时间和网络事件的误差及折算到本地时间的定时时刻。
3、锁定本地时间,不允许修改。VB6上好像有这个控件,能够知道用户修改时间事件。
解决方案2: 还有一个办法是将服务器设置为时间服务器
然后在客户机上将时间服务器指向本地服务器,并且设置1分钟或10秒就更新一次本地时间
也不产生外网流量
解决方案3: 如果有服务器的话,可以访问服务器时间啊.
尤其服务器上有数据库的话,通过SQL语句查询数据库时间是很简单的工作,而且也不产生对外流量
解决方案4: 定时取得网络时间,记录偏差。
多长时间取得一次网络时间,找到平衡点即可
如果时间是非常critical的话,全部使用网络时间也没有关系,流量应该不大。
解决方案5:如果检测到用户修改了时间,可以重新获取网络时间啊。
如果你觉得做不来,就不要纠结本地时间了,多访问几次网络也不是什么大事。
解决方案6: 稍微懂点脑子就会了 --> 稍微动点脑子就会了
而且肯定比解二元二次方程组简单多了。就是需要你在四个或者三个时间点去记录时间,然后进行两次加减法和除法而已。
解决方案7: 关于“如何计算本地时间差错”,你应该看看ntps简单协议。他其实就好像是“二元二次方程组”一样简单,稍微懂点脑子就会了。
你可以访问一次服务器,获取本地时钟跟服务器的偏差。然后如果你想在服务器的某个时间处理,那么预先将这个时间换算为本地(偏差了的)时间就行了。
解决方案8: 你可以使用一个TImer监控本地时间,被修改的话计算一下时间差就知道了。
你可以那网络时间与本地时间相减得到时间差,以后都按本地时间算差值。
解决方案9: 可以每隔1、2分钟获取一次网络时间,不断修正你的累加
以上介绍了“一个关于时钟的延迟问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1640555.html