dimanche 5 mars 2017

Time measurement via sleep () or usleep ()

I try to measure an exact time and have tried ... but with a "sleep (1) / usleep (1000)" I do not get what I expect.

Here my test code and the result:

SysDate s;  // Contains:
//     unsigned long long startM;
//     unsigned long long endM;

mach_timebase_info_data_t info;
kern_return_t KernelReturnCodes;                    // int

// Example 1
double res;

KernelReturnCodes = mach_timebase_info(&info);      // for debug
s.startM = mach_absolute_time();
sleep(1);
s.endM = mach_absolute_time();
res = mach_elapsed_time(s.startM, s.endM) / 1000000.0;
printf( "\n1:----------\n\t%f seconds\n", res / 1000);

// Example 2
double res2;
unsigned long long start;
unsigned long long end;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
start = mach_absolute_time();
sleep(1);
end = mach_absolute_time();
res2 = mach_elapsed_time(start, end) / 1000000.0;
printf( "\n2:----------\n\t%f seconds\n", res2 / 1000 );

// Example 3
double res3;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
s.startM = mach_absolute_time();
usleep(1000);
s.endM = mach_absolute_time();
res3 = mach_elapsed_time(s.startM, s.endM) / 1000000.0;
printf( "\n3:---1000---\n\t%f seconds\n", res3);

// Example 4
double res4;
start = 0L;
end   = 0L;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
start = mach_absolute_time();
usleep(1000);
end = mach_absolute_time();
res4 = mach_elapsed_time(start, end) / 1000000.0;
printf( "\n4:---1000---\n\t%f seconds\n", res4);

// Example 5
double res5;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
s.startM = mach_absolute_time();
usleep(900);
s.endM = mach_absolute_time();
res5 = mach_elapsed_time(s.startM, s.endM) / 1000000.0;
printf( "\n5:----900---\n\t%f seconds\n", res5);

// Example 6
double res6;
start = 0L;
end   = 0L;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
start = mach_absolute_time();
usleep(900);
end = mach_absolute_time();
res6 = mach_elapsed_time(start, end) / 1000000.0;
printf( "\n6:----900---\n\t%f seconds\n", res6);

// Example 7
double res7;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
s.startM = mach_absolute_time();
usleep(815);
s.endM = mach_absolute_time();
res7 = mach_elapsed_time(s.startM, s.endM) / 1000000.0;
printf( "\n7:----815---\n\t%f seconds\n", res7);

// Example 8
double res8;
start = 0L;
end   = 0L;

KernelReturnCodes = mach_timebase_info(&info);  // Not necessary / unnecessary
start = mach_absolute_time();
usleep(815);
end = mach_absolute_time();
res8 = mach_elapsed_time(start, end) / 1000000.0;
printf( "\n8:----815---\n\t%f seconds\n", res8);

/* -------------------------->> output: 1:---------- 1.004597 seconds // Almost what I expect 2:---------- 1.000097 seconds 3:---1000--- 1.252561 seconds 4:---1000--- 1.252341 seconds 5:----900--- 1.135227 seconds 6:----900--- 1.127429 seconds 7:----815--- 0.902179 seconds 8:----815--- 1.021522 seconds (lldb) <<--------------------------*/ what is wrong?

Thank you for each tip

Aucun commentaire:

Enregistrer un commentaire