14 #include "ul_htimer.h"
16 /*===========================================================*/
19 void timing_test_print(struct timeval *start, struct timeval *stop, char *s)
22 sec=stop->tv_sec-start->tv_sec;
23 usec=stop->tv_usec-start->tv_usec;
32 printf("%s :\t%4ld.%06ld\n",s,sec,usec);
35 void timing_test(void)
41 ul_htim_time_t cmp_time;
43 struct timeval time_start, time_stop;
45 printf("\nRunning htimer timing test for %d items\n",items_cnt);
47 items=malloc(items_cnt*sizeof(ul_htimer_t));
49 printf("malloc items failed\n");
53 for(i=0;i<items_cnt;i++){
54 ul_htimer_init_detached(&items[i]);
55 items[i].function=NULL;
58 ul_htimer_set_expire(&items[i],(i&~1)*500);
62 }while((r>0x7fffffff)||(r<0));
63 ul_htimer_set_expire(&items[i],r);
68 gettimeofday(&time_start,NULL);
69 for(i=0;i<items_cnt;i++){
70 //for(i=items_cnt;i-->0;){
71 if(ul_htimer_add(&ul_root_htimer, items+i)<0)
72 printf("ul_htimer_add is buggy\n");
74 gettimeofday(&time_stop,NULL);
75 timing_test_print(&time_start,&time_stop,"htimer insert");
78 gettimeofday(&time_start,NULL);
79 for(i=0;i<items_cnt;i++){
80 if(!(p=ul_htimer_cut_expired(&ul_root_htimer, &cmp_time)))
81 printf("ul_htimer_cut_expired NULL\n");
84 if(ul_htimer_get_expire(p)<r)
85 printf("ul_htimer_cut_expired returns items in the bad order !!!!!\n");
86 r=ul_htimer_get_expire(p);
87 ul_htimer_set_expire(p,0);
91 gettimeofday(&time_stop,NULL);
92 timing_test_print(&time_start,&time_stop,"cut expired");
97 /*===========================================================*/
100 void test_htimer_fnc(unsigned long data)
103 ul_get_log_time_str(s);
104 printf("%6ld : ms %8ld real %s\n",data,ul_mstime_last,s);
107 int mstime_test(void)
113 /*allocate new timer*/
114 timer=malloc(sizeof(ul_htimer_t));
115 /*ensure, that timer is in detached state*/
116 ul_htimer_init_detached(timer);
117 timer->function=test_htimer_fnc;
119 ul_htimer_set_expire(timer,(i&~1)*500);
120 if(ul_htimer_add(&ul_root_htimer, timer)<0)
121 printf("ul_htimer_add is buggy\n");
125 ul_msdiff_t ms_sleep;
127 ul_htimer_run_expired(&ul_root_htimer,&ul_mstime_last);
129 ul_compute_mstime_next();
130 ms_sleep=ul_mstime_next-ul_mstime_last;
131 if(ms_sleep<0) ms_sleep=0;
132 /* we do not want to overflow usec field of timeout.tv_usec */
133 if(ms_sleep>(~(ul_mstime_t)0/2001)) ms_sleep=~(ul_mstime_t)0/2001;
135 #ifdef there_is_something_else_do
136 if(ul_inepoll(ul_net->ul_fd)>0){
139 ul_net_do_rec_msg(ul_net);
140 } while((ul_inepoll(ul_net->ul_fd)>0)&&loopcnt--);
142 #endif /*there_is_something_else_do*/
144 #ifdef WITHOUT_SYS_SELECT
146 if(ms_sleep>100) ms_sleep=100;
148 #elif defined(UL_DRV_IN_LIB)
149 if(ms_sleep>100) ms_sleep=100;
150 usleep(ms_sleep*1000);
151 #endif /* UL_DRV_IN_LIB */
152 #else /* !WITHOUT_SYS_SELECT */
155 struct timeval timeout;
159 /*set ones for all other monitored file handles*/
160 /*FD_SET (ul_net->ul_fd, &set);*/
163 timeout.tv_usec = ms_sleep*1000;
164 while ((ret=select(FD_SETSIZE,&set, NULL, NULL,&timeout))==-1
166 /* printf("select %d ",ret); */
172 printf("\nUser requested quit\n");
177 #endif /* !WITHOUT_SYS_SELECT */
183 int main(int argc, char *argv[])
186 ul_htimer_init_queue(&ul_root_htimer);