Sign in to follow this  
No_Germs

Getting the current time in c++

Recommended Posts

I can't imagine why you would want the time-of-day that much resolution. After all, when you set the time on your computer, is it accurate to the millisecond?

I am assuming that you want to time how long something takes, such as frame rate. For that you need higher resolution of course. I don't believe there is a standard C function that measures time with better-than-seconds resolution (clock() perhaps?). Anyway, if you are programming for Windows, look up QueryPerformanceCounter().

Share this post


Link to post
Share on other sites
Quote:
Original post by JohnBolton
I don't believe there is a standard C function that measures time with better-than-seconds resolution (clock() perhaps?).


Potentially. Although there's no guaranteed resolution, the value returned by clock() increases by CLOCKS_PER_SEC every second - so if CLOCKS_PER_SEC is 1000, clock() would return milliseconds. On my system it's 1,000,000.

For a C++ solution, you may want to use the Boost Timer Library - it depends on the functionality of clock().

Further information from my manpage:

NAME
clock - Determine processor time

SYNOPSIS
#include <time.h>

clock_t clock(void);

DESCRIPTION
The clock() function returns an approximation of processor
time used by the program.

RETURN VALUE
The value returned is the CPU time used so far as a
clock_t; to get the number of seconds used, divide by
CLOCKS_PER_SEC. If the processor time used is not avail­
able or its value cannot be represented, the function
returns the value (clock_t)-1.

CONFORMING TO
ANSI C. POSIX requires that CLOCKS_PER_SEC equals 1000000
independent of the actual resolution.

NOTES
The C standard allows for arbitrary values at the start of
the program; subtract the value returned from a call to
clock() at the start of the program to get maximum porta­
bility.

Note that the time can wrap around. On a 32bit system
where CLOCKS_PER_SEC equals 1000000 this function will
return the same value approximately every 72 minutes.

The times() function call returns more information.

SEE ALSO
getrusage(2), times(2)

GNU 1993-04-21 CLOCK(3)

Share this post


Link to post
Share on other sites
maybe i'm thinking about this the wrong way- i dont need the current date, just want to measure how much time has passed since the last game loop has ended so i'll how much distance to move each figure in the game...

Share this post


Link to post
Share on other sites
Depending on the platform there are functions that provide the total CPU time. Windows, GLUT, and SDL all provide these functions. So you can either look them up or just tell us what you're using and I'm sure someone would be happy to tell you what function to use.

The technique you'll use, BTW, is to get the new time that has elapsed each frame, subtract that from the time that elapsed last frame and you'll have the time that has passed for each frame.

Good luck!

Share this post


Link to post
Share on other sites
Quote:
Original post by MaulingMonkey
Quote:
Original post by JohnBolton
I don't believe there is a standard C function that measures time with better-than-seconds resolution (clock() perhaps?).


Potentially. Although there's no guaranteed resolution, the value returned by clock() increases by CLOCKS_PER_SEC every second - so if CLOCKS_PER_SEC is 1000, clock() would return milliseconds. On my system it's 1,000,000.


Lol. I have a funny story here.

When I was in university, I had to do precise timing of algorithms for my undergrad thesis. I found that on the undergrad lab computers (some version of redhat linux, on sparcstations),

- clock() - intended to "determine processor time" as your manpage notes - wouldn't cut it.
- The interval timer API (getitimer/setitimer etc.) was no better.
- Ditto anything else along those lines I could think to look for.

Out of all of those things specifically intended for benchmarking CPU performance, none would give me better timing than 1/512 second.

But the one timing function in the whole damn set intended to tell humans what time of day it is yielded microsecond timing.

Share this post


Link to post
Share on other sites
I've used gettimeofday for use in dead reckoning algorithms. It's useful, and the timing is very good. Don't remember what the resolution is off the top of my head, but if the above poster says microsecond, I suppose that's what it is. I don't know if it gets better than that.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this