char *clockstring(int clockid)
{ switch (clockid) { case CLOCK_REALTIME: return"CLOCK_REALTIME"; case CLOCK_MONOTONIC: return"CLOCK_MONOTONIC"; case CLOCK_PROCESS_CPUTIME_ID: return"CLOCK_PROCESS_CPUTIME_ID"; case CLOCK_THREAD_CPUTIME_ID: return"CLOCK_THREAD_CPUTIME_ID"; case CLOCK_MONOTONIC_RAW: return"CLOCK_MONOTONIC_RAW"; case CLOCK_REALTIME_COARSE: return"CLOCK_REALTIME_COARSE"; case CLOCK_MONOTONIC_COARSE: return"CLOCK_MONOTONIC_COARSE"; case CLOCK_BOOTTIME: return"CLOCK_BOOTTIME"; case CLOCK_REALTIME_ALARM: return"CLOCK_REALTIME_ALARM"; case CLOCK_BOOTTIME_ALARM: return"CLOCK_BOOTTIME_ALARM"; case CLOCK_TAI: return"CLOCK_TAI";
} return"UNKNOWN_CLOCKID";
}
/* returns 1 if a <= b, 0 otherwise */ staticinlineint in_order(struct timespec a, struct timespec b)
{ /* use unsigned to avoid false positives on 2038 rollover */ if ((unsignedlong)a.tv_sec < (unsignedlong)b.tv_sec) return1; if ((unsignedlong)a.tv_sec > (unsignedlong)b.tv_sec) return0; if (a.tv_nsec > b.tv_nsec) return0; return1;
}
int consistency_test(int clock_type, unsignedlong seconds)
{ struct timespec list[CALLS_PER_LOOP]; int i, inconsistent; long now, then;
time_t t; char *start_str;
clock_gettime(clock_type, &list[0]);
now = then = list[0].tv_sec;
/* timestamp start of test */
t = time(0);
start_str = ctime(&t);
while (seconds == -1 || now - then < seconds) {
inconsistent = -1;
/* Fill list */ for (i = 0; i < CALLS_PER_LOOP; i++)
clock_gettime(clock_type, &list[i]);
/* Check for inconsistencies */ for (i = 0; i < CALLS_PER_LOOP - 1; i++) if (!in_order(list[i], list[i+1]))
inconsistent = i;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.