示例#1
0
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);
    }
    */
}
示例#2
0
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;
}