Home | History | Annotate | Download | only in deutil

Lines Matching refs:timer

21  * \brief Periodic timer.
39 HANDLE timer;
44 const deTimer* timer = (const deTimer*)lpParameter;
47 timer->callback(timer->callbackArg);
52 deTimer* timer = (deTimer*)deCalloc(sizeof(deTimer));
54 if (!timer)
57 timer->callback = callback;
58 timer->callbackArg = arg;
59 timer->timer = 0;
61 return timer;
64 void deTimer_destroy (deTimer* timer)
66 DE_ASSERT(timer);
68 if (deTimer_isActive(timer))
69 deTimer_disable(timer);
71 deFree(timer);
74 deBool deTimer_isActive (const deTimer* timer)
76 return timer->timer != 0;
79 deBool deTimer_scheduleSingle (deTimer* timer, int milliseconds)
83 DE_ASSERT(timer && milliseconds > 0);
85 if (deTimer_isActive(timer))
88 ret = CreateTimerQueueTimer(&timer->timer, NULL, timerCallback, timer, (DWORD)milliseconds, 0, WT_EXECUTEDEFAULT);
92 DE_ASSERT(!timer->timer);
99 deBool deTimer_scheduleInterval (deTimer* timer, int milliseconds)
103 DE_ASSERT(timer && milliseconds > 0);
105 if (deTimer_isActive(timer))
108 ret = CreateTimerQueueTimer(&timer->timer, NULL, timerCallback, timer, (DWORD)milliseconds, (DWORD)milliseconds, WT_EXECUTEDEFAULT);
112 DE_ASSERT(!timer->timer);
119 void deTimer_disable (deTimer* timer)
121 if (timer->timer)
130 BOOL success = DeleteTimerQueueTimer(NULL, timer->timer, waitEvent);
149 timer->timer = 0;
163 timer_t timer;
170 const deTimer* timer = (const deTimer*)val.sival_ptr;
171 timer->callback(timer->callbackArg);
176 deTimer* timer = (deTimer*)deCalloc(sizeof(deTimer));
179 if (!timer)
184 sevp.sigev_value.sival_ptr = timer;
187 if (timer_create(CLOCK_REALTIME, &sevp, &timer->timer) != 0)
189 deFree(timer);
193 timer->callback = callback;
194 timer->callbackArg = arg;
195 timer->isActive = DE_FALSE;
197 return timer;
200 void deTimer_destroy (deTimer* timer)
202 DE_ASSERT(timer);
204 timer_delete(timer->timer);
205 deFree(timer);
208 deBool deTimer_isActive (const deTimer* timer)
210 return timer->isActive;
213 deBool deTimer_scheduleSingle (deTimer* timer, int milliseconds)
217 DE_ASSERT(timer && milliseconds > 0);
219 if (timer->isActive)
227 if (timer_settime(timer->timer, 0, &tspec, DE_NULL) != 0)
230 timer->isActive = DE_TRUE;
234 deBool deTimer_scheduleInterval (deTimer* timer, int milliseconds)
238 DE_ASSERT(timer && milliseconds > 0);
240 if (timer->isActive)
248 if (timer_settime(timer->timer, 0, &tspec, DE_NULL) != 0)
251 timer->isActive = DE_TRUE;
255 void deTimer_disable (deTimer* timer)
259 DE_ASSERT(timer);
266 timer_settime(timer->timer, 0, &tspec, DE_NULL);
270 timer->isActive = DE_FALSE;
283 TIMERSTATE_INTERVAL = 0, /*!< Active interval timer. */
284 TIMERSTATE_SINGLE, /*!< Single callback timer. */
285 TIMERSTATE_DISABLED, /*!< Disabled timer. */
296 int interval; /*!< Timer interval. */
299 volatile TimerState state; /*!< Timer state. */
306 deTimerThread* curThread; /*!< Current timer thread. */
381 deTimer* timer = (deTimer*)deCalloc(sizeof(deTimer));
383 if (!timer)
386 timer->callback = callback;
387 timer->callbackArg = arg;
389 return timer;
392 void deTimer_destroy (deTimer* timer)
394 if (timer->curThread)
395 deTimer_disable(timer);
396 deFree(timer);
399 deBool deTimer_isActive (const deTimer* timer)
401 if (timer->curThread)
405 deMutex_lock(timer->curThread->lock);
406 isActive = timer->curThread->state != TIMERSTATE_LAST;
407 deMutex_unlock(timer->curThread->lock);
415 deBool deTimer_scheduleSingle (deTimer* timer, int milliseconds)
417 if (timer->curThread)
418 deTimer_disable(timer);
420 DE_ASSERT(!timer->curThread);
421 timer->curThread = deTimerThread_create(timer->callback, timer->callbackArg, milliseconds, TIMERSTATE_SINGLE);
423 return timer->curThread != DE_NULL;
426 deBool deTimer_scheduleInterval (deTimer* timer, int milliseconds)
428 if (timer->curThread)
429 deTimer_disable(timer);
431 DE_ASSERT(!timer->curThread);
432 timer->curThread = deTimerThread_create(timer->callback, timer->callbackArg, milliseconds, TIMERSTATE_INTERVAL);
434 return timer->curThread != DE_NULL;
437 void deTimer_disable (deTimer* timer)
439 if (!timer->curThread)
442 deMutex_lock(timer->curThread->lock);
444 if (timer->curThread->state != TIMERSTATE_DISABLED)
450 timer->curThread->state = TIMERSTATE_DISABLED;
451 deThread_destroy(timer->curThread->thread);
452 timer->curThread->thread = 0;
453 deMutex_unlock(timer->curThread->lock);
455 /* Thread will destroy timer->curThread. */
459 /* Single timer has expired - we must destroy whole thread structure. */
460 deMutex_unlock(timer->curThread->lock);
461 deThread_destroy(timer->curThread->thread);
462 deMutex_destroy(timer->curThread->lock);
463 deFree(timer->curThread);
466 timer->curThread = DE_NULL;