Changeset 3718
- Timestamp:
- 02/21/06 23:36:15 (3 years ago)
- Files:
-
- libwired/trunk/libwired/thread/wi-timer.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/thread/wi-timer.c
r3657 r3718 42 42 #include <wired/wi-timer.h> 43 43 44 #define _WI_TIMER_EPSILON 0. 144 #define _WI_TIMER_EPSILON 0.2 45 45 46 46 … … 110 110 111 111 static void _wi_timers_thread(wi_runtime_instance_t *argument) { 112 wi_timer_t *timer ;112 wi_timer_t *timer, *fire_timer; 113 113 wi_time_interval_t interval, diff; 114 wi_boolean_t locked; 114 115 115 116 while(true) { 116 timer = wi_list_first_data(_wi_timers); 117 interval = wi_time_interval(); 117 fire_timer = NULL; 118 locked = true; 119 timer = wi_list_first_data(_wi_timers); 120 interval = wi_time_interval(); 118 121 119 122 if(!timer) { … … 122 125 timer = wi_list_first_data(_wi_timers); 123 126 interval = wi_time_interval(); 127 128 if(timer && timer->fire - interval <= _WI_TIMER_EPSILON) 129 fire_timer = timer; 124 130 } else { 125 131 diff = timer->fire - interval; 126 132 127 if(diff > _WI_TIMER_EPSILON) { 128 wi_condition_lock_lock_when_condition(_wi_timers_lock, 1, diff); 129 130 interval = wi_time_interval(); 131 132 timer = wi_list_first_data(_wi_timers); 133 } 133 if(diff <= _WI_TIMER_EPSILON) { 134 fire_timer = timer; 135 136 locked = false; 137 } else { 138 if(!wi_condition_lock_lock_when_condition(_wi_timers_lock, 1, diff)) 139 fire_timer = wi_list_first_data(_wi_timers); 140 } 134 141 } 135 142 136 if( timer && timer->fire <= interval) {137 _wi_timer_invalidate( timer);143 if(fire_timer) { 144 _wi_timer_invalidate(fire_timer); 138 145 139 wi_timer_fire( timer);146 wi_timer_fire(fire_timer); 140 147 141 148 if(timer->repeats) 142 _wi_timer_schedule( timer);149 _wi_timer_schedule(fire_timer); 143 150 } 144 151 145 wi_condition_lock_unlock_with_condition(_wi_timers_lock, 0); 152 if(locked) 153 wi_condition_lock_unlock_with_condition(_wi_timers_lock, 0); 146 154 } 147 155 }
