[AccessD] Timer function, fraction of seconds

Gustav Brock Gustav at cactus.dk
Mon Feb 14 09:49:41 CST 2005


Hi Stuart

Thanks. Are you sure about those 10 ms?
If I run a small test function:

Public Function TimerSequence() As Single

  Dim sngLast  As Single
  Dim sngNext  As Single
  Dim lngTimer As Long
  Dim lngCount As Long
  Dim lngItems As Long
  
  While Timer * 100 Mod 100 > 0
    lngTimer = Timer
  Wend
  For lngCount = 1 To 3000000
    sngLast = sngNext
    sngNext = Timer
    If lngTimer < Int(sngNext) Then
      Exit For
    ElseIf sngLast < sngNext Then
      lngItems = lngItems + 1
      Debug.Print lngItems, sngNext * 100 Mod 100
    End If
  Next
  
  TimerSequence = 1000 / lngItems

End Function

I always get this sequence:

 1             0 
 2             2 
 3             3 
 4             5 
 5             6 
 6             8 
 7             9 
 8             11 
 9             12 
 10            14 
 11            16 
 12            17 
 13            19 
 14            20 
 15            22 
 16            23 
 17            25 
 18            27 
 19            28 
 20            30 
 21            31 
 22            33 
 23            34 
 24            36 
 25            38 
 26            39 
 27            41 
 28            42 
 29            44 
 30            45 
 31            47 
 32            48 
 33            50 
 34            52 
 35            53 
 36            55 
 37            56 
 38            58 
 39            59 
 40            61 
 41            62 
 42            64 
 43            66 
 44            67 
 45            69 
 46            70 
 47            72 
 48            73 
 49            75 
 50            77 
 51            78 
 52            80 
 53            81 
 54            83 
 55            84 
 56            86 
 57            88 
 58            89 
 59            91 
 60            92 
 61            94 
 62            95 
 63            97 
 64            98 

which returns 15.625 ms per count.
Looks to me like an even distribution of five bits per second rather
than based on ticks ...

/gustav

>>> stuart at lexacorp.com.pg 14-02-2005 14:54:35 >>>
On 14 Feb 2005 at 14:23, Gustav Brock wrote:

> Hi all
> 
> Has anyone used this?
> It is a classic in the callback function example but I don't recall
any
> reference to it.
> 
> It seems to return seconds from midnight as well as a fraction of a
> second with a resolution of about 1/60 second. Thus it could be used
> where you need a resolution of less than one second.
> 
I've been using the Timer function in various flavours of Basic for may

years. TheTimer finctions (and the .Net DateTime.Now) use the
getTickCount 
API function.  In W9X, the default resolution is approx 50ms (actually
55 
ms or 18.2 times per second), in NT/2K/XP it's approx 10 ms. It also
has a 
very low priority in the task queue so can be postponed/cancelled.

There are two more accurate timers available.  timeGetTime ( 
Environment.TickCount in.Net) which is good for 1/1000 sec but has a
fairly 
high overhead and QueryPerformanceCounter/PerformanceFrequency which is

very accurate for *short* times.
-- 
Stuart




More information about the AccessD mailing list