level 11
五代十国情仇🎓
楼主
用vb编了一个计时器软件,精度达到微秒,主要利用cpu主频来实现代码如下
ion Explicit
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
Private g_cCPU频率 As Currency
Type 精确定时器 '定时器对象
已暂停 As Boolean
CPU时间 As Double
暂停时间 As Double
End Type
Sub 全局初始化精确计时器() '使用本模块其它函数的时候,必须先调用此函数完成初始化
'其实初始化也就是取得CPU频率
QueryPerformanceFrequency g_cCPU频率
End Sub
Function 取得CPU时间() As Double '取得CPU启动以来的时间(时钟数÷频率)
Dim 计数 As Currency
QueryPerformanceCounter 计数
取得CPU时间 = 计数 / g_cCPU频率
End Function
Function 新建精确计时器() As 精确定时器 '所有的“精确定时器”对象必须用这个函数来初始化
With 新建精确计时器
.已暂停 = True '刚创建出来时是暂停状态
.CPU时间 = 取得CPU时间
End With
End Function
Sub 精确计时器开始计时(计时器 As 精确定时器) '标记“精确定时器”为运转状态
With 计时器
If .已暂停 Then
.CPU时间 = 取得CPU时间 - .暂停时间
.已暂停 = False
End If
End With
End Sub
Sub 精确计时器暂停计时(计时器 As 精确定时器) '暂停“精确定时器”的时间
With 计时器
If Not .已暂停 Then
.暂停时间 = 取得精确的时间(计时器)
.已暂停 = True
End If
End With
End Sub
Function 取得精确的时间(计时器 As 精确定时器) As Double '从“精确定时器”读数。。。
If 计时器.已暂停 Then
取得精确的时间 = 计时器.暂停时间
Else
取得精确的时间 = 取得CPU时间 - 计时器.CPU时间
End If
End Function
SRC下载:精确计时器.bas(1.56 KB, 下载次数: 32)
使用范例:(使用前必须先添加这个文件到工程中。)
新建某Form,然后粘贴下面的代码即可。运行的时候,玩法就是,按空格键,然后看标题栏上显示的时间。以秒为单位哦。
[Visual Basic]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
Dim 计时器 As 精确定时器
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then 精确计时器开始计时 计时器
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then 精确计时器暂停计时 计时器
End Sub
Private Sub Form_Load()
Show
全局初始化精确计时器
计时器 = 新建精确计时器
Do
Cls
Caption = 取得精确的时间(计时器)
Loop While DoEvents
End Sub
2018年04月25日 07点04分
1
ion Explicit
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long
Private g_cCPU频率 As Currency
Type 精确定时器 '定时器对象
已暂停 As Boolean
CPU时间 As Double
暂停时间 As Double
End Type
Sub 全局初始化精确计时器() '使用本模块其它函数的时候,必须先调用此函数完成初始化
'其实初始化也就是取得CPU频率
QueryPerformanceFrequency g_cCPU频率
End Sub
Function 取得CPU时间() As Double '取得CPU启动以来的时间(时钟数÷频率)
Dim 计数 As Currency
QueryPerformanceCounter 计数
取得CPU时间 = 计数 / g_cCPU频率
End Function
Function 新建精确计时器() As 精确定时器 '所有的“精确定时器”对象必须用这个函数来初始化
With 新建精确计时器
.已暂停 = True '刚创建出来时是暂停状态
.CPU时间 = 取得CPU时间
End With
End Function
Sub 精确计时器开始计时(计时器 As 精确定时器) '标记“精确定时器”为运转状态
With 计时器
If .已暂停 Then
.CPU时间 = 取得CPU时间 - .暂停时间
.已暂停 = False
End If
End With
End Sub
Sub 精确计时器暂停计时(计时器 As 精确定时器) '暂停“精确定时器”的时间
With 计时器
If Not .已暂停 Then
.暂停时间 = 取得精确的时间(计时器)
.已暂停 = True
End If
End With
End Sub
Function 取得精确的时间(计时器 As 精确定时器) As Double '从“精确定时器”读数。。。
If 计时器.已暂停 Then
取得精确的时间 = 计时器.暂停时间
Else
取得精确的时间 = 取得CPU时间 - 计时器.CPU时间
End If
End Function
SRC下载:精确计时器.bas(1.56 KB, 下载次数: 32)
使用范例:(使用前必须先添加这个文件到工程中。)
新建某Form,然后粘贴下面的代码即可。运行的时候,玩法就是,按空格键,然后看标题栏上显示的时间。以秒为单位哦。
[Visual Basic]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
Dim 计时器 As 精确定时器
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then 精确计时器开始计时 计时器
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeySpace Then 精确计时器暂停计时 计时器
End Sub
Private Sub Form_Load()
Show
全局初始化精确计时器
计时器 = 新建精确计时器
Do
Cls
Caption = 取得精确的时间(计时器)
Loop While DoEvents
End Sub

