timers in visual c++?

Started by
7 comments, last by bruins01 23 years, 12 months ago
Is there a kind of Timer() function I can use to: a) calculate frame rates, b) end a game after a certain amount of time? I only need something that would return the number of seconds since midnight of something. Please Help!! I am very frustrated, and Mike00 isn''t helping!
Advertisement
Yes, there is

The SetTimer function creates a timer with the specified time-out value.

UINT SetTimer(
HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);

Parameters
hWnd
Handle to the window to be associated with the timer. This window must be owned by the calling thread. If this parameter is NULL, no window is associated with the timer and the nIDEvent parameter is ignored.
nIDEvent
Specifies a nonzero timer identifier. If the hWnd parameter is NULL, this parameter is ignored.
uElapse
Specifies the time-out value, in milliseconds.
lpTimerFunc
Pointer to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc.
If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message''sMSG structure contains the value of the hWnd parameter.

Return Values
If the function succeeds, the return value is an integer identifying the new timer. An application can pass this value, or the string identifier, if it exists, to the KillTimer function to destroy the timer.

If the function fails to create a timer, the return value is zero. To get extended error information, call GetLastError.


Visit our homepage: www.rarebyte.de.st

GA
Visit our homepage: www.rarebyte.de.stGA
Not a good idea to calculate framerates from WM_TIMER as it can be influenced by CPU usage and the windows message stack.

You should probably use timeGetTime() as defined in winmm.lib. There are a number of example code snippets that use it to calculate framerates (including some sample code in the direct3d sdk) but I don''t have a URL handy..
Sorry.

This Space Left Blank
Just an idea.... you could also use GetTickCount() to do what you want... it gives you the time in miliseconds since windows startup..

..-gLaDiAtOr=-..
And there is also

QueryPerformanceCounter

which gives you the best control.

Jaap suter
____________________________Mmmm, I''ll have to think of one.
that''s right... I didn''t want to confuse the questioner
i''ve always used the timing class available in windoze with msvc++.
QueryPerformanceCounter is the best device available to you without using *shudder* DirectX. This is because every other counter either has flaws, or counts too slowly. Using the message system in windows is a joke. WM_TIMER is influenced by EVERYTHING and can''t be trusted to give you an accurate timing of small ammounts of time. The getTickCount() works great, except what happens if you render more than 100 FPS? It can (and will) only return a maximum of 100 times per second. The Performace counter is based on your CPU''s internal clock speed and will not waiver or faulter at all. Here''s a link to the first version of the OpenGL SuperBible. It should have a section entitled "Real-Time Graphics" with a full implementation documentation and explanation.

OpenGL SuperBible:
http://www.itknowledge.com/reference/archive/1571690735/ewtoc.html

-- John d8?)

"No, really, I DO know it all!" <-- Yeah, Right!!
-- John d8?)"No, really, I DO know it all!" <-- Yeah, Right!!
sc0rpy is right, multimedia timers are more accurate

Visit our homepage: www.rarebyte.de.st

GA
Visit our homepage: www.rarebyte.de.stGA

This topic is closed to new replies.

Advertisement