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);
151 timer->timer = 0;
165 timer_t timer;
172 const deTimer* timer = (const deTimer*)val.sival_ptr;
173 timer->callback(timer->callbackArg);
178 deTimer* timer = (deTimer*)deCalloc(sizeof(deTimer));
181 if (!timer)
186 sevp.sigev_value.sival_ptr = timer;
189 if (timer_create(CLOCK_REALTIME, &sevp, &timer->timer) != 0)
191 deFree(timer);
195 timer->callback = callback;
196 timer->callbackArg = arg;
197 timer->isActive = DE_FALSE;
199 return timer;
202 void deTimer_destroy (deTimer* timer)
204 DE_ASSERT(timer);
206 timer_delete(timer->timer);
207 deFree(timer);
210 deBool deTimer_isActive (const deTimer* timer)
212 return timer->isActive;
215 deBool deTimer_scheduleSingle (deTimer* timer, int milliseconds)
219 DE_ASSERT(timer && milliseconds > 0);
221 if (timer->isActive)
229 if (timer_settime(timer->timer, 0, &tspec, DE_NULL) != 0)
232 timer->isActive = DE_TRUE;
236 deBool deTimer_scheduleInterval (deTimer* timer, int milliseconds)
240 DE_ASSERT(timer && milliseconds > 0);
242 if (timer->isActive)
250 if (timer_settime(timer->timer, 0, &tspec, DE_NULL) != 0)
253 timer->isActive = DE_TRUE;
257 void deTimer_disable (deTimer* timer)
261 DE_ASSERT(timer);
268 timer_settime(timer->timer, 0, &tspec, DE_NULL);
272 timer->isActive = DE_FALSE;
285 TIMERSTATE_INTERVAL = 0, /*!< Active interval timer. */
286 TIMERSTATE_SINGLE, /*!< Single callback timer. */
287 TIMERSTATE_DISABLED, /*!< Disabled timer. */
308 deTimerThread* curThread; /*!< Current timer thread. */
383 deTimer* timer = (deTimer*)deCalloc(sizeof(deTimer));
385 if (!timer)
388 timer->callback = callback;
389 timer->callbackArg = arg;
391 return timer;
394 void deTimer_destroy (deTimer* timer)
396 if (timer->curThread)
397 deTimer_disable(timer);
398 deFree(timer);
401 deBool deTimer_isActive (const deTimer* timer)
403 if (timer->curThread)
407 deMutex_lock(timer->curThread->lock);
408 isActive = timer->curThread->state != TIMERSTATE_LAST;
409 deMutex_unlock(timer->curThread->lock);
417 deBool deTimer_scheduleSingle (deTimer* timer, int milliseconds)
419 if (timer->curThread)
420 deTimer_disable(timer);
422 DE_ASSERT(!timer->curThread);
423 timer->curThread = deTimerThread_create(timer->callback, timer->callbackArg, milliseconds, TIMERSTATE_SINGLE);
425 return timer->curThread != DE_NULL;
428 deBool deTimer_scheduleInterval (deTimer* timer, int milliseconds)
430 if (timer->curThread)
431 deTimer_disable(timer);
433 DE_ASSERT(!timer->curThread);
434 timer->curThread = deTimerThread_create(timer->callback, timer->callbackArg, milliseconds, TIMERSTATE_INTERVAL);
436 return timer->curThread != DE_NULL;
439 void deTimer_disable (deTimer* timer)
441 if (!timer->curThread)
444 deMutex_lock(timer->curThread->lock);
446 if (timer->curThread->state != TIMERSTATE_DISABLED)
452 timer->curThread->state = TIMERSTATE_DISABLED;
453 deThread_destroy(timer->curThread->thread);
454 timer->curThread->thread = 0;
455 deMutex_unlock(timer->curThread->lock);
457 /* Thread will destroy timer->curThread. */
461 /* Single timer has expired - we must destroy whole thread structure. */
462 deMutex_unlock(timer->curThread->lock);
463 deThread_destroy(timer->curThread->thread);
464 deMutex_destroy(timer->curThread->lock);
465 deFree(timer->curThread);
468 timer->curThread = DE_NULL;