之前对这个问题百思不得起解,偶然看到一篇技术文章,茅塞顿开。
原来,cpu自上电之后,内部维持了一个64位计数器(无符号,因此范围超大),每过一个CPU时钟周期,计数器加一
所以说:
开机到360安全卫士自动运行时,360安全卫士读取cpu这个计数器,但是这个64位的无符号数仅仅是cpu周期个数,还必须除以cpu的主频,才是启动的时间(单位秒)。
--------------------------------------------------------------------------------------------
读取cpu时间计数器,没有c函数可以做到,只有汇编级别的代码,如下:
/*****************VC 环境下****************/
inline unsigned __int64 GetCycleCount()
{
//__asm RDTSC,这一行同下面两行等价
__asm _emit 0x0F
__asm _emit 0x31
}
原来,cpu自上电之后,内部维持了一个64位计数器(无符号,因此范围超大),每过一个CPU时钟周期,计数器加一
所以说:
开机到360安全卫士自动运行时,360安全卫士读取cpu这个计数器,但是这个64位的无符号数仅仅是cpu周期个数,还必须除以cpu的主频,才是启动的时间(单位秒)。
--------------------------------------------------------------------------------------------
读取cpu时间计数器,没有c函数可以做到,只有汇编级别的代码,如下:
/*****************VC 环境下****************/
inline unsigned __int64 GetCycleCount()
{
//__asm RDTSC,这一行同下面两行等价
__asm _emit 0x0F
__asm _emit 0x31
}