datetime review part 2

Jonathan M Davis jmdavisProg at gmx.com
Fri Nov 26 06:12:29 PST 2010


On Friday 26 November 2010 05:59:58 Jonathan M Davis wrote:
> On Friday 26 November 2010 04:38:47 Michel Fortin wrote:
> > On 2010-11-26 03:03:15 -0500, Jonathan M Davis <jmdavisProg at gmx.com> said:
> > > Most recent code: http://is.gd/hO85C
> > > 
> > > I added code for Mac OS X which should use its monotonic clock
> > > functions. Unfortunately, as I don't own a Mac, it's completed
> > > untested, but in theory, what's there should work, and someone with a
> > > Mac can fix it later if need be.
> > 
> > Just tested it. There's an error in the definition of
> > mach_timebase_info (takes a mach_timebase_info_t* argument, but it
> > should be mach_timebase_info_t, no pointer) and the
> > mach_timebase_info_t alias is missing. Here's a fixed version of the
> > 
> > definitions:
> > 	extern(C)
> > 	{
> > 	
> > 		struct mach_timebase_info_data_t
> > 		{
> > 		
> > 		    uint numer;
> > 		    uint denom;
> > 		
> > 		}
> > 		alias mach_timebase_info_data_t* mach_timebase_info_t;
> > 		
> > 		kern_return_t mach_timebase_info(mach_timebase_info_t);
> > 		
> > 		ulong mach_absolute_time();
> > 	
> > 	}
> > 
> > I tested it with this small program:
> > 	extern(C) void sleep(uint sec);
> > 	
> > 	void main()
> > 	{
> > 	
> > 	    auto start = TickDuration.currSystemTick;
> > 	    sleep(20);
> > 	    auto end = TickDuration.currSystemTick;
> > 	    writeln(to!string(end-start));
> > 	
> > 	}
> > 
> > And this is the result (more or less a few thousands on each run):
> > 	TickDuration(20000046269)
> > 
> > So it seems all good.
> 
> Thanks! It's hard enough to test for Windows, but doing any Mac testing is
> essentially impossible for me.
> 
> > One thing I wonder about... what is the expected behaviour if you put
> > the computer to sleep in the middle of the above program? With
> > mach_absolute_time, the clock stops counting while the computer is put
> > to sleep. Does TickDuration.currSystemTick works like that on all
> > systems? If there's a difference in behaviour perhaps it should be
> > documented.
> 
> Really? That is... not good. Unacceptable in fact. Even if it were
> acceptable when dealing with stop watch and benchmarking code (which is
> questionable), it totally fries Clock.currAppTick(), which tells you how
> long the application has been running. The documentation for
> QueryPermanceCounter() and clock_gettime() give no indication that the
> clock stops counting when a thread is sleeping.
> 
> Do you know if there's another way to get a monotonic clock on the Mac -
> one which isn't affected by sleep? Much as I'd hate to do it, it would be
> better to use gettimeofday() and forgo the monotonic clock then have a
> monotonic clock which is affected by sleep. But I'd _really_ like to have
> a monotonic clock if I can.

This page ( http://is.gd/hP6Zr ) claims that mach_absolute_time() is not affected 
by sleeping.

- Jonathan M Davis


More information about the Digitalmars-d mailing list