_timer_init函数返回的是微秒数啊,为什么帮助里写是毫秒数?
本帖最后由 yorker0503 于 2011-10-16 23:07 编辑#include <Timers.au3>
_Main()
Func _Main()
HotKeySet("{ESC}", "_Quit")
Local $starttime = _Timer_Init()
While 1
;ToolTip(_Timer_Diff($starttime))
ToolTip(_Timer_Init())
WEnd
EndFunc ;==>_Main
Func _Quit()
Exit
EndFunc ;==>_Quit 求验证~~~~~~~ 回复 2# yorker0503
是毫秒级啊,你认为小数点后面的还有意义吗 Func __Timer_QueryPerformanceFrequency()
Local $aResult = DllCall("kernel32.dll", "bool", "QueryPerformanceFrequency", "int64*", 0)
If @error Then Return SetError(@error, @extended, 0)
Return SetExtended($aResult, $aResult)
EndFunc ;==>__Timer_QueryPerformanceFrequency
看函数原型,_Time_init确实是返回的微秒数。
但再看_Timer_Diff函数的确是返回的是毫秒级的。
Func _Timer_Diff($iTimeStamp)
Return 1000 * (__Timer_QueryPerformanceCounter() - $iTimeStamp) / __Timer_QueryPerformanceFrequency()
EndFunc ;==>_Timer_Diff 回复 4# 3mile
怎么得到时间戳呢?timer_init返回的不是标准时间戳 回复 4# 3mile
其实说“看函数原型,_Time_init确实是返回的微秒数”也是不对的。_Time_init函数其实就是调用的API中的QueryPerformanceCounter函数:
$aResult = DllCall("kernel32.dll", "bool", "QueryPerformanceCounter", "int64*", 0)
QueryPerformanceCounter函数返回的是一个计数,而不是时间。它返回的是一个高精度计数:取得CPU运行到现在Tick(CPU振荡了多少次,更准确地说是chipset)了多少次,由于现在基本是多核的,其实它仅返回了一个特定的‘核’的次数。它的范围是一个有符号64位整型(HighPart的最高位为符号位)。
而要计算时间,就还需要一个频率,于是在API中,可以用QueryPerformanceFrequency函数可以取得频率:次/秒,于是就可以通过两次高精度计数之差再以这个频率,就得到一个事件经历的时间了。在au3,把这个时间(API里为秒)乘以了1000,所以得到就是毫秒了
Func _Timer_Diff($iTimeStamp)
Return 1000 * (__Timer_QueryPerformanceCounter() - $iTimeStamp) / __Timer_QueryPerformanceFrequency()
EndFunc
页:
[1]