|
nux-1.14.0
|
Public Types | |
| enum | { TIMERTYPE_UNKNONW = 0L, TIMERTYPE_PERIODIC, TIMERTYPE_DURATION, TIMERTYPE_ITERATION } |
Public Member Functions | |
| TimerHandle | AddTimerHandler (unsigned int Period, TimerFunctor *Callback, void *Data, WindowThread *window_thread=NULL) |
| Add a timer callback. | |
| TimerHandle | AddPeriodicTimerHandler (unsigned int Period, int Duration, TimerFunctor *Callback, void *Data) |
| Add a periodic timer callback. | |
| TimerHandle | AddCountIterationTimerHandler (unsigned int Period, int NumberOfIteration, TimerFunctor *Callback, void *Data) |
| Add a timer callback to be called a finite number of time. | |
| bool | FindTimerHandle (TimerHandle &handle) |
| Search for a timer handle. | |
| bool | RemoveTimerHandler (TimerHandle &handle) |
| Remove a timer;. | |
| int | DelayUntilNextTimerExpires () |
| Return the delay until the next timer expires. | |
| int | ExecTimerHandler () |
| void | StartEarlyTimerObjects () |
| Start the timers that were sett before the system was fully initialized. | |
Definition at line 65 of file TimerProc.h.
| TimerHandle nux::TimerHandler::AddCountIterationTimerHandler | ( | unsigned int | Period, |
| int | NumberOfIteration, | ||
| TimerFunctor * | Callback, | ||
| void * | Data | ||
| ) |
Add a timer callback to be called a finite number of time.
Add a timer callback to the timer manager. The timer callback will be call N times exactly. Every time the timer expires, the callback function is executed. The returned TimerHandle should not be deleted by the caller.
| Milliseconds | Period delay before the callback is executed. |
| NumberOfIteration | The number of time to repeat the the wait period. |
| Callback | The callback to execute when the timer expires. |
| Data | The callback data |
Definition at line 266 of file TimerProc.cpp.
References nux::TimerObject::Period, nux::TimerObject::ScheduledIteration, and nux::TimerObject::when.
{
TimerObject *timer_object = new TimerObject();
TimeRightNow (&timer_object->when);
Addmillisecs (&timer_object->when, Period);
timer_object->CallbackData = Data;
timer_object->TimerCallback = Callback;
timer_object->Period = Period;
timer_object->ScheduledIteration = (NumberOfIterations < 0) ? -1 : NumberOfIterations;
timer_object->Type = TIMERTYPE_ITERATION;
AddHandle (timer_object);
#if (defined(NUX_OS_LINUX) || defined(NUX_USE_GLIB_LOOP_ON_WINDOWS)) && (!defined(NUX_DISABLE_GLIB_LOOP))
{
timer_object->glibid = GetWindowThread ()->AddGLibTimeout (Period);
if (timer_object->glibid == 0)
{
_early_timer_objects.push_back(timer_object);
// Probably trying to set a timeout before Glib main context and loop have been created.
// Sometimes later, this timer will be examined when ExecTimerHandler is called.
// This happens when trying to set a callback before the mainloop has been initialized.
}
//nuxDebugMsg(TEXT("[TimerHandler::AddTimerHandler] Adding Timeout ID: %d"), timer_object->glibid);
}
#endif
TimerHandle handle (timer_object);
return handle;
}
| TimerHandle nux::TimerHandler::AddPeriodicTimerHandler | ( | unsigned int | Period, |
| int | Duration, | ||
| TimerFunctor * | Callback, | ||
| void * | Data | ||
| ) |
Add a periodic timer callback.
Add a timer callback to the timer manager. Every time the timer expires, the callback function is executed. The returned TimerHandle should not be deleted by the caller.
| Milliseconds | Period delay before the callback is executed. |
| Duration | The duration over which the timer is repeated. |
| Callback | The callback to execute when the timer expires. |
| Data | The callback data |
Definition at line 233 of file TimerProc.cpp.
References nux::TimerObject::Duration, nux::TimerObject::Period, and nux::TimerObject::when.
{
TimerObject *timer_object = new TimerObject();
TimeRightNow (&timer_object->when);
Addmillisecs (&timer_object->when, Period);
timer_object->CallbackData = Data;
timer_object->TimerCallback = Callback;
timer_object->Period = Period;
timer_object->Duration = (Duration < 0) ? -1 : Duration;
timer_object->Type = TIMERTYPE_DURATION;
AddHandle (timer_object);
#if (defined(NUX_OS_LINUX) || defined(NUX_USE_GLIB_LOOP_ON_WINDOWS)) && (!defined(NUX_DISABLE_GLIB_LOOP))
{
timer_object->glibid = GetWindowThread ()->AddGLibTimeout (Period);
if (timer_object->glibid == 0)
{
_early_timer_objects.push_back(timer_object);
// Probably trying to set a timeout before Glib main context and loop have been created.
// Sometimes later, this timer will be examined when ExecTimerHandler is called.
// This happens when trying to set a callback before the mainloop has been initialized.
}
//nuxDebugMsg(TEXT("[TimerHandler::AddTimerHandler] Adding Timeout ID: %d"), timer_object->glibid);
}
#endif
TimerHandle handle (timer_object);
return handle;
}
| TimerHandle nux::TimerHandler::AddTimerHandler | ( | unsigned int | Period, |
| TimerFunctor * | Callback, | ||
| void * | Data, | ||
| WindowThread * | window_thread = NULL |
||
| ) |
Add a timer callback.
Add a timer callback to the timer manager. When the timer expires, the callback function is executed. The returned TimerObject should not be deleted by the caller.
| Milliseconds | Period delay before the callback is executed. |
| Callback | The callback to execute when the timer expires. |
| Data | The callback data |
| window_thread | Thread safety mesure. Pass the WindowThread associated to this TimerHandler if it is called from a diferent thread than the one where the main thread was created. |
Definition at line 192 of file TimerProc.cpp.
References nux::WindowCompositor::GetProcessingTopView(), nux::TimerObject::Period, nux::TimerObject::when, and nux::TimerObject::Window.
{
TimerObject *timer_object = new TimerObject();
TimeRightNow(&timer_object->when);
Addmillisecs(&timer_object->when, Period);
timer_object->CallbackData = Data;
timer_object->TimerCallback = Callback;
timer_object->Period = Period;
timer_object->Type = TIMERTYPE_PERIODIC;
if (window_thread)
timer_object->Window = window_thread->GetWindowCompositor ().GetProcessingTopView();
else
timer_object->Window = GetWindowCompositor ().GetProcessingTopView();
AddHandle (timer_object);
#if (defined(NUX_OS_LINUX) || defined(NUX_USE_GLIB_LOOP_ON_WINDOWS)) && (!defined(NUX_DISABLE_GLIB_LOOP))
{
if (window_thread)
timer_object->glibid = window_thread->AddGLibTimeout (Period);
else
timer_object->glibid = GetWindowThread ()->AddGLibTimeout (Period);
if (timer_object->glibid == 0)
{
_early_timer_objects.push_back(timer_object);
// Probably trying to set a timeout before Glib main context and loop have been created.
// Sometimes later, this timer will be examined when ExecTimerHandler is called.
// This happens when trying to set a callback before the mainloop has been initialized.
}
//nuxDebugMsg(TEXT("[TimerHandler::AddTimerHandler] Adding Timeout ID: %d"), timer_object->glibid);
}
#endif
TimerHandle handle (timer_object);
return handle;
}
| int nux::TimerHandler::DelayUntilNextTimerExpires | ( | ) |
Return the delay until the next timer expires.
Definition at line 618 of file TimerProc.cpp.
References nux::TimerObject::when.
{
TimeStruct now;
TimeStruct delay;
if (m_timer_object_queue == NULL)
{
// The return value of this function is only valid if there _are_ timers active.
return 0;
}
else
{
TimeRightNow (&now);
if (TimeIsGreater (now, m_timer_object_queue->when) )
{
return 0;
}
else
{
delay.sec = m_timer_object_queue->when.sec - now.sec;
delay.usec = m_timer_object_queue->when.usec - now.usec;
// make sure that usec cannot be less than -1000000 before applying this code
if (delay.usec < 0)
{
delay.usec += 1000000;
delay.sec--;
}
return (delay.sec * 1000000 + delay.usec) / 1000; // return delay in milliseconds
}
}
}
| bool nux::TimerHandler::FindTimerHandle | ( | TimerHandle & | handle | ) |
Search for a timer handle.
Search for a timer handle in the timer handle queue. Return true if the timer is found.
| handle | Timer handle to search. |
Definition at line 600 of file TimerProc.cpp.
{
TimerObject *tmp = m_timer_object_queue;
while (tmp)
{
if (tmp == timer_object.m_d && (tmp->uid == timer_object.m_d->uid) )
{
return true;
}
tmp = tmp->next;
}
return false;
}
| bool nux::TimerHandler::RemoveTimerHandler | ( | TimerHandle & | handle | ) |
Remove a timer;.
| handle | Timer handle to search. |
Definition at line 360 of file TimerProc.cpp.
{
NUX_RETURN_VALUE_IF_NULL (timer_object.m_d, false);
NUX_RETURN_VALUE_IF_NULL (m_timer_object_queue, false);
TimerObject *tmp;
tmp = m_timer_object_queue;
while (tmp)
{
if ( (tmp == timer_object.m_d) && (tmp->uid == timer_object.m_d->uid) )
{
if (!m_IsProceesingTimers)
{
if (tmp->next)
tmp->next->prev = tmp->prev;
if (tmp->prev)
tmp->prev->next = tmp->next;
if ( (timer_object.m_d == m_timer_object_queue) && (timer_object.m_d->uid == m_timer_object_queue->uid) )
m_timer_object_queue = timer_object.m_d->next;
NUX_SAFE_DELETE (timer_object.m_d);
}
else
{
timer_object.m_d->MarkedForRemoval = true;
}
return true;
}
tmp = tmp->next;
}
return false;
}