From: <kr_...@us...> - 2003-03-26 02:20:00
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK In directory sc8-pr-cvs1:/tmp/cvs-serv5945/port/src/cbits/GTK Modified Files: Timer.c Log Message: Efficient implementation for timers Index: Timer.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Timer.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Timer.c 10 Feb 2003 22:42:09 -0000 1.3 --- Timer.c 26 Mar 2003 02:19:57 -0000 1.4 *************** *** 3,7 **** #include "Internals.h" ! static gboolean osTimerProc( gpointer data ) { handleTimer((TimerHandle) data); --- 3,7 ---- #include "Internals.h" ! static gboolean osTimerProc(gpointer data) { handleTimer((TimerHandle) data); *************** *** 9,20 **** } ! TimerHandle osCreateTimer( int msecs ) { ! guint timerid; ! TimerHandle timer = rmalloc( sizeof(guint) ); ! ! *timer = 0; ! timerid = gtk_timeout_add( msecs, osTimerProc, timer ); ! *timer = timerid; gActiveObjects++; --- 9,18 ---- } ! TimerHandle osCreateTimer(int msecs) { ! TimerHandle timer = rmalloc(sizeof(*timer)); ! timer->interval = msecs; ! timer->enabled = TRUE; ! timer->id = (msecs > 0) ? gtk_timeout_add(msecs, osTimerProc, timer) : 0; gActiveObjects++; *************** *** 22,32 **** } ! void osDestroyTimer( TimerHandle timer ) { if (timer!=NULL) { ! gtk_timeout_remove( *timer ); rfree(timer); gActiveObjects--; } } --- 20,71 ---- } ! void osDestroyTimer(TimerHandle timer) { if (timer!=NULL) { ! if (timer->id > 0) ! gtk_timeout_remove(timer->id); rfree(timer); gActiveObjects--; } } + + void osSetTimerInterval(TimerHandle timer, int msecs) + { + if (timer->interval != msecs) + { + timer->interval = msecs; + if (timer->enabled) + { + if (timer->id > 0) + gtk_timeout_remove(timer->id); + timer->id = (msecs > 0) gtk_timeout_add(msecs, osTimerProc, timer) : 0; + } + } + }; + + int osGetTimerInterval(TimerHandle timer) + { + return timer->interval; + }; + + void osEnableTimer(TimerHandle timer, BOOL enabled) + { + timer->enabled = enabled; + if (timer->enabled) + { + if (timer->id <= 0 && timer->interval > 0) + timer->id = gtk_timeout_add(msecs, osTimerProc, timer); + } + else + { + if (timer->id > 0) + gtk_timeout_remove(timer->id); + timer->id = 0; + } + }; + + BOOL osIsTimerEnabled(TimerHandle timer) + { + return timer->enabled; + }; |