void insert_dh(u_short seq) { struct delay_node *p, *node; p = DELAY_HEAD; while (p->next != NULL) { p = p->next; } node = (struct delay_node *)malloc(sizeof(struct delay_node)); node->seq = seq; gettimeofday(&node->tv, NULL); struct timeval delay_tv; delay_tv.tv_usec = delay_t; delay_tv.tv_sec = 0; while (delay_tv.tv_usec >= 1000000) { delay_tv.tv_usec -= 1000000; delay_tv.tv_sec ++; } timersum(node->tv, node->tv, delay_tv); node->next = NULL; p->next = node; /* printf("delay array:\n"); for (p=DELAY_HEAD->next; p!=NULL; p=p->next) { printf("seq: %u time: %ld\n",p->seq,p->tv); } */ }
struct itimerspec * rtime(struct itimerspec * t) { double tim = (((double)random() * timer_range) /RAND_MAX) + min_timer; t->it_value.tv_sec =tim; t->it_value.tv_nsec = ((tim - t->it_value.tv_sec) * NSEC_PER_SEC); if( absf ) timersum(&t->it_value,&t->it_value,&tb); return t; }
int main(void) { struct timespec pre_time, post_time; struct timespec req, res; double diff; int k,i; static int bla=0; ioperm(0x378,3,1); req.tv_sec = 0; req.tv_nsec = 10; Try(clock_getres(CLOCK, &res)); printf("Clock resolution %12.3f usec\n", (double)res.tv_nsec/NSEC_PER_USEC); printf("Requested time difference(usec)\n"); for (i=0; i<30; i++){ req.tv_nsec *= 10; if (req.tv_nsec >= NSEC_PER_SEC) { req.tv_nsec = 100; req.tv_sec++; } // req.tv_sec = 0; // req.tv_nsec = 500 * 1000; // for (k = 0; k < 20; k++) { Try(clock_gettime(CLOCK, &pre_time)); Try0(clock_nanosleep(CLOCK, 0, &req, NULL)); Try(clock_gettime(CLOCK, &post_time)); timersum(&post_time, &post_time, &req); if(bla) { outb(0x1,0x378); bla = 0; } else { outb(0x0,0x378); bla = 1; } diff = better_timerdiff(&post_time, &pre_time)/NSEC_PER_USEC; ////diff = timerdiff(&post_time, &pre_time); printf("%12.9f\t %12.9f\n", (double)req.tv_sec + ((double)req.tv_nsec/NSEC_PER_SEC), diff); // } } return 0; }