The simple BetterNow() function, shown here, replaces the built-in Now() function. It’s faster (10 microseconds vs. 180 microseconds on a Pentium 166MMX) and more accurate, potentially supplying one-millisecond resolution, instead of 1000 milliseconds.
Because it’s also faster and more accurate than Timer(), which clocks at 100 microseconds and provides 55 milliseconds resolution, it should also replace Timer, especially when Timer() is used to measure elapsed times. Besides, Timer() rolls over at midnight, and BetterNow() doesn’t:
#If Win16 Then Private Declare Function timeGetTime Lib _ "MMSYSTEM.DLL" () As Long#Else Private Declare Function timeGetTime Lib "winmm.dll" _ () As Long#End IfFunction BetterNow() As Date Static offset As Date Static uptimeMsOld As Long Dim uptimeMsNew As Long Const oneSecond = 1 / (24# * 60 * 60) Const oneMs = 1 / (24# * 60 * 60 * 1000) uptimeMsNew = timeGetTime() ' check to see if it is first time function called or ' if timeGetTime rolled over (happens every 47 days) If offset = 0 Or uptimeMsNew < uptimeMsOld Then offset = Date - uptimeMsNew * oneMs + CDbl(Timer) * _ oneSecond uptimeMsOld = uptimeMsNew End If BetterNow = uptimeMsNew * oneMs + offsetEnd Function