如何编写一个内部的计时器
我的程序须要记录用户运行的时间, 为了防止用户作弊,比如通过改变机器时间, 通过‘变速齿轮’等工具, 人为的加速系统的时钟,这样用户就可能在一分钟内挂完一个小时的时间。
所以所以在程序中内部维护一个时钟,它的跳动不随着外界情况而变化
请知道的给个建议
多谢:)
[解决办法]
从服务器取时间好了。
[解决办法]
GetTickCount不可以么?
[解决办法]
给你个思路,先和客户端的时间是一致的,当客户端时间突然不是一秒一秒的过,而是一分或者一小时,这时检测与其不一样,OK,设为非法操作.
[解决办法]
精确计时请用QueryPerformanceCounter和QueryPerformanceFrequence,不过多核心或HT的情况下,要注意设置calling thread affinity.还有就是不要用原始的rdtsc,现在来说,不安全,不准确~
[解决办法]
要是想绕过OS,就用 rdtsc吧,不过你得做更多的工作,来保证它的准确性和正确性~
[解决办法]
不是偏差的问题,比如多核情况下,这条指令在哪个Core上执行的问题,所以这就需要thread affinity等~
[解决办法]
Windows时间函数大全
http://blog.csdn.net/ugg/archive/2007/03/09/1525015.aspx
[解决办法]
:高精度时控函数QueryPerformanceFrequency,QueryPerformanceCounter
使用:LARGE_INTEGER m_nFreq;
LARGE_INTEGER m_nBeginTime;
LARGE_INTEGER nEndTime;
QueryPerformanceFrequency(&m_nFreq); // 获取时钟周期
QueryPerformanceCounter(&m_nBeginTime); // 获取时钟计数
Sleep(100);
QueryPerformanceCounter(&nEndTime);
cout < < (nEndTime.QuadPart-m_nBeginTime.QuadPart)*1000/m_nFreq.QuadPart < < endl;
原理:CPU上也有一个计数器,以机器的clock为单位,可以通过rdtsc读取,而不用中断,因此其精度与系统时间相当。
精度:计算机获取硬件支持,精度比较高,可以通过它判断其他时间函数的精度范围。
[解决办法]
我的程序须要记录用户运行的时间, 为了防止用户作弊,比如通过改变机器时间, 通过‘变速齿轮’等工具, 人为的加速系统的时钟,这样用户就可能在一分钟内挂完一个小时的时间。
所以所以在程序中内部维护一个时钟,它的跳动不随着外界情况而变化
---------------------------------------------
只是这么简单的功能,大家想的太复杂了吧!不管电脑开机时是几月几日几时几分几秒,只要保证电脑中的系统时间不是几秒钟(现实时间)后变为几分钟后的时间甚至几小时后的时间,也就是不让系统时间人为乱改而已。还是那句话:
GetTickCount不可以么?
[解决办法]
hook这些API轻松就可以做到修改的目的。。。
[解决办法]
留个脚印.不错
Windows时间函数大全
http://blog.csdn.net/ugg/archive/2007/03/09/1525015.aspx