看似简单的问题,关于GetTickCount的准确性!
我有一个客户端获取网络时间(37端口)的程序,为了减少客户端访问网络主机的数量又不修改客户端的系统时间,我设计了一个机制可以自己计算网络主机的时间。
原理是:客户端应用在每次启动的时候,从网络主机37端口获取时间,同时将当时客户端系统的TickCount一同记录下来。在程序运行中,如果需要获取网络时间,通过将当前的TickCount减去系统启动时的TickCount,计算出时间差,通过时间差可以计算出当前的网络主机时间。
目前的问题是,系统运行几个小时后,通过TickCount差值计算出的时间,总是比实际的网络主机时间慢了几十秒。也就是说,GetTickCount并不准确,而且每次都是慢,而不是快。这个让我不禁联想到Timer的机制,难道GetTickCount在系统内部也是一个类似Timer的定时器?会因为CPU占用率、消息队列优先级等因素延迟?
有人能解释GetTickCount的这个问题吗?
如果使用QueryPerformanceFrequency,QueryPerformanceCounter是否能精确维护一个时钟,而不出现上述问题呢?