问题描述
我正在用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
解决方法
谢谢,货币是一个难题,特别是对于其他问题,这里的问题是GetTicketCount的返回值仅为4个字节整数,并且仅计入该值,因此将其分配给货币没有任何作用变量。