yorker0503 发表于 2011-10-16 23:01:38

_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

yorker0503 发表于 2011-10-16 23:01:55

求验证~~~~~~~

xwt620 发表于 2011-10-17 00:03:27

回复 2# yorker0503


    是毫秒级啊,你认为小数点后面的还有意义吗

3mile 发表于 2011-10-17 09:26:19

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

yorker0503 发表于 2011-10-17 09:38:44

回复 4# 3mile


怎么得到时间戳呢?timer_init返回的不是标准时间戳

happytc 发表于 2011-10-17 10:51:31

回复 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]
查看完整版本: _timer_init函数返回的是微秒数啊,为什么帮助里写是毫秒数?