我正在用 vba 编写一些 winsocket 应用程序,并且可能会超时。
我已经尝试过 API-Timer Settimer 和 Killtimer,但是你必须小心地启动和停止与普通 vba 程序并行的计时器。
vba 中包含的 timer() 函数不是很精确,所以我决定在 32 位办公系统上使用 GetTickCount 对定时器进行编程。
但问题是 24.9 天后计数器重新启动。在较新的系统上,您现在可以使用 longptr 和 GetTickCount64 i,但它也应该在旧的 Windows 32 位系统上运行。
所以我编写了类似环形计数器的代码约 1 秒,但我不确定
- 如果您可以更好地编码或
- 即使它在 24.9 天后有效
那么您能否对我的测试程序(用excel vba编码)做出一些回应:
Option Explicit
Declare Function GetTickCount Lib "kernel32" () As Long
Sub sTest()
Dim intStart As Integer
Dim intDelta As Integer
Do
intStart = fxTimer1024
intDelta = fxTimerDelta(intStart)
Do While intDelta < 200
DoEvents 'endless loop, use ctrl+pause/break to end
intDelta = fxTimerDelta(intStart)
Loop
Debug.Print intStart, intDelta
Loop
End Sub
Function fxTimer1024()
fxTimer1024 = GetTickCount() Mod 1024
End Function
Function fxTimerDelta(intStart)
Dim x As Long
x = fxTimer1024
If intStart > x Then
fxTimerDelta = x + 1024 - intStart
Else
fxTimerDelta = x - intStart
End If
End Function