Archived

This topic is now archived and is closed to further replies.

bruins01

timers in visual c++?

Recommended Posts

bruins01    122
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!

Share this post


Link to post
Share on other sites
ga    126
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

Share this post


Link to post
Share on other sites
sc0rpy    122
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.

Share this post


Link to post
Share on other sites
Gladiator    127
Just an idea.... you could also use GetTickCount() to do what you want... it gives you the time in miliseconds since windows startup..

..-gLaDiAtOr=-..

Share this post


Link to post
Share on other sites
Guest Anonymous Poster   
Guest Anonymous Poster
i''ve always used the timing class available in windoze with msvc++.

Share this post


Link to post
Share on other sites
Scootr7481    122
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!!

Share this post


Link to post
Share on other sites