15 #define WITHOUT_SYS_SELECT
17 #include "ul_htimer.h"
19 /*===========================================================*/
22 void timing_test_print(struct timeval *start, struct timeval *stop, char *s)
25 sec=stop->tv_sec-start->tv_sec;
26 usec=stop->tv_usec-start->tv_usec;
35 printf("%s :\t%4ld.%06ld\n",s,sec,usec);
38 void timing_test(void)
44 ul_htim_time_t cmp_time;
45 ul_htimer_queue_t *root_htimer;
46 struct timeval time_start, time_stop;
48 printf("\nRunning htimer timing test for %d items\n",items_cnt);
50 items=malloc(items_cnt*sizeof(ul_htimer_t));
52 printf("malloc items failed\n");
56 for(i=0;i<items_cnt;i++){
57 ul_htimer_init_detached(&items[i]);
58 items[i].function=NULL;
61 ul_htimer_set_expire(&items[i],(i&~1)*500);
65 }while((r>0x7fffffff)||(r<0));
66 ul_htimer_set_expire(&items[i],r);
71 root_htimer = ul_root_htimer_get(0, NULL);
73 gettimeofday(&time_start,NULL);
74 for(i=0;i<items_cnt;i++){
75 //for(i=items_cnt;i-->0;){
76 if(ul_htimer_add(root_htimer, items+i)<0)
77 printf("ul_htimer_add is buggy\n");
79 gettimeofday(&time_stop,NULL);
80 timing_test_print(&time_start,&time_stop,"htimer insert");
83 gettimeofday(&time_start,NULL);
84 for(i=0;i<items_cnt;i++){
85 if(!(p=ul_htimer_cut_expired(root_htimer, &cmp_time)))
86 printf("ul_htimer_cut_expired NULL\n");
89 if(ul_htimer_get_expire(p)<r)
90 printf("ul_htimer_cut_expired returns items in the bad order !!!!!\n");
91 r=ul_htimer_get_expire(p);
92 ul_htimer_set_expire(p,0);
96 gettimeofday(&time_stop,NULL);
97 timing_test_print(&time_start,&time_stop,"cut expired");
99 ul_root_htimer_put(root_htimer);
104 /*===========================================================*/
107 void test_htimer_fnc(unsigned long data)
110 ul_htim_time_t actual_time;
111 ul_get_log_time_str(s);
112 ul_root_htimer_current_time(0, &actual_time);
113 printf("%6ld : ms %8ld real %s\n",data,actual_time,s);
116 int mstime_test(void)
119 ul_htimer_queue_t *root_htimer;
120 ul_htim_time_t actual_time;
122 ul_root_htimer_current_time(0, &actual_time);
123 actual_time += 1000 - 1 - (actual_time - 1) % 1000;
125 root_htimer = ul_root_htimer_get(0, NULL);
128 /*allocate new timer*/
129 timer=malloc(sizeof(ul_htimer_t));
130 /*ensure, that timer is in detached state*/
131 ul_htimer_init_detached(timer);
132 timer->function=test_htimer_fnc;
134 ul_htimer_set_expire(timer,actual_time + (i&~1)*500);
135 if(ul_htimer_add(root_htimer, timer)<0)
136 printf("ul_htimer_add is buggy\n");
138 ul_root_htimer_put(root_htimer);
141 ul_htim_time_t next_expire;
142 ul_msdiff_t ms_sleep;
144 ul_root_htimer_current_time(0, &actual_time);
146 root_htimer = ul_root_htimer_get(0, NULL);
147 ul_htimer_run_expired(root_htimer,&actual_time);
148 if(!ul_htimer_next_expire(root_htimer,&next_expire))
149 next_expire=actual_time+0x10000000;
150 ul_root_htimer_put(root_htimer);
152 ul_root_htimer_current_time(0, &actual_time);
154 ul_htime_sub2ms(&ms_sleep, &next_expire, &actual_time);
155 if(ms_sleep<0) ms_sleep=0;
156 /* we do not want to overflow usec field of timeout.tv_usec */
157 if(ms_sleep>(~(ul_mstime_t)0/2001)) ms_sleep=~(ul_mstime_t)0/2001;
159 #ifdef there_is_something_else_do
160 if(ul_inepoll(ul_net->ul_fd)>0){
163 ul_net_do_rec_msg(ul_net);
164 } while((ul_inepoll(ul_net->ul_fd)>0)&&loopcnt--);
166 #endif /*there_is_something_else_do*/
168 #ifdef WITHOUT_SYS_SELECT
170 if(ms_sleep>100) ms_sleep=100;
172 #elif defined(UL_DRV_IN_LIB)
173 if(ms_sleep>100) ms_sleep=100;
174 usleep(ms_sleep*1000);
175 #endif /* UL_DRV_IN_LIB */
176 #else /* !WITHOUT_SYS_SELECT */
179 struct timeval timeout;
183 /*set ones for all other monitored file handles*/
184 /*FD_SET (ul_net->ul_fd, &set);*/
187 timeout.tv_usec = ms_sleep*1000;
188 while ((ret=select(FD_SETSIZE,&set, NULL, NULL,&timeout))==-1
190 /* printf("select %d ",ret); */
196 printf("\nUser requested quit\n");
201 #endif /* !WITHOUT_SYS_SELECT */
207 int main(int argc, char *argv[])
209 ul_root_htimer_init(0, NULL);