home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!usc!rpi!batcomputer!munnari.oz.au!mel.dit.csiro.au!highett!steveo
- From: steveo@mel.dbce.csiro.au (Stephen Oakes)
- Newsgroups: comp.os.ms-windows.programmer.misc
- Subject: Re: Inaccuracy in windows timer?
- Message-ID: <576@highett.mel.dbce.csiro.au>
- Date: 18 Nov 92 05:05:47 GMT
- References: <1992Nov18.113155.165165@dstos3.dsto.gov.au>
- Organization: CSIRO, Div. Building Constr. and Eng'ing, Melb., Australia
- Lines: 38
-
- In article <1992Nov18.113155.165165@dstos3.dsto.gov.au> jav@dstos3.dsto.gov.au writes:
- >Windows timer inaccuracy!
- >
- >I have an application which needs to sample a value every 60 seconds. I use
- >the settimer function with an interval of 60000 to send a message to the
- >appropriate window which invokes the relevant member function to do the
- >sampling (I'm using Boralnd C++ 3.1 with OWL). This all works fine except that
- >the sampling time actually creeps by about 1 second every thirty minutes. I
- >store the time (obtained using standard C time.h functions from the PC clock)
- >in a file with every sample and after thirty minutes or so, the sampling occurs
- >one second later in the minute than originally.
-
- Never ever *ever* *EVER* rely upon the Windows timer to give you accurate
- timing. There are several issues here. One of them is that (according
- to the docs) you are not even guaranteed that you will get every timer message,
- because they are low priority messages, and if one stays in the message queue
- long enough (until another one is placed there) Windows will remove the first
- one. Or you might just get a message a few seconds late if Windows is busy
- with another app.
-
- Also, although the docs say that the parameter passed to SetTimer
- is in milliseconds, I wonder if they actually use 1/1024 instead?
-
- To avoid the slippage you describe, I think there are three possibilities:
- 1. Use SetTimer to send you a message far more frequently (say
- every second) and then read the actual time to determine
- whether you should do the sample.
- 2. Similar to the above, except do it in a PeekMessage loop
- instead of using a timer. This may degrade Windows'
- performance slightly.
- 3. I think you can use the DDK to get more accurate timings,
- but I don't know anything about this.
-
- --
- | Stephen Oakes CSIRO Division of Building, Construction and Engineering |
- | Post Office Box 56, Highett, Victoria, Australia 3190 |
- | Internet: steveo@mel.dbce.csiro.au Tel: +61 3 252 6000 Fax: +61 3 252 6249 |
- |_____________________________________________________________________________|
-