On Jun 4, 2009, at 5:39 AM, harpreet_si...@oxyent.com wrote:
I am facing an issue in use of mach_absolute_time().

mach_absolute_time() gives drift even when NTP timing update is on.

Please see my code below:

#import <Cocoa/Cocoa.h>
#import <mach/mach_time.h>
nt main(int argc, char *argv[])
{
        uint64_t nowTime = mach_absolute_time();
        uint64_t drift = 0;
        for (int i=0;i<1000;i++)
        {
                sleep(5);
                uint64_t current_Time = mach_absolute_time();
                uint64_t differenceTime = (current_Time - nowTime)*1E-6;
                drift = differenceTime - (i+1)*5000;
                NSLog(@"Elapsed Time =%lld",differenceTime);
                NSLog(@"drift =%lld",drift);
        }
        return 1;
   //return NSApplicationMain(argc,  (const char **) argv);
}

Expected Results:
I expected to see zero drift in the print. After several runs, the drift
kept on increasing

Your expectation is wrong. sleep() will sleep for 5000 milliseconds. But (1) there's no guarantee that your thread gets to run at the 5001st millisecond, and (2) your timing and printing code itself takes non-zero time.

If you really want to run every 5000 milliseconds with no drift, you'll need to use a more careful sleep mechanism (starting with nanosleep() plus accounting for the non-sleep time). A proper timer like NSTimer or CFRunLoopTimer might also work; they won't drift, but their jitter might be too high for your purposes.


--
Greg Parker     gpar...@apple.com     Runtime Wrangler


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to