找回密码
 加入
搜索
查看: 2846|回复: 5

[系统综合] _timer_init函数返回的是微秒数啊,为什么帮助里写是毫秒数?

[复制链接]
发表于 2011-10-16 23:01:38 | 显示全部楼层 |阅读模式
本帖最后由 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
 楼主| 发表于 2011-10-16 23:01:55 | 显示全部楼层
求验证~~~~~~~
发表于 2011-10-17 00:03:27 | 显示全部楼层
回复 2# yorker0503


    是毫秒级啊,你认为小数点后面的还有意义吗
发表于 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[0], $aResult[1])
EndFunc   ;==>__Timer_QueryPerformanceFrequency

看函数原型,_Time_init确实是返回的微秒数。
但再看_Timer_Diff函数的确是返回的是毫秒级的。
Func _Timer_Diff($iTimeStamp)
        Return 1000 * (__Timer_QueryPerformanceCounter() - $iTimeStamp) / __Timer_QueryPerformanceFrequency()
EndFunc   ;==>_Timer_Diff
 楼主| 发表于 2011-10-17 09:38:44 | 显示全部楼层
回复 4# 3mile


怎么得到时间戳呢?timer_init返回的不是标准时间戳
发表于 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 12:52 , Processed in 0.086294 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表