Add g_timer_continue(). (#98536, Tim-Philipp Müller)

Thu Jan 22 13:55:44 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gtimer.c: Add g_timer_continue().
        (#98536, Tim-Philipp Müller)

        * configure.in: Version 2.3.2, interface age 0.

        * NEWS: tweak, finish.
This commit is contained in:
Owen Taylor 2004-01-22 19:56:28 +00:00 committed by Owen Taylor
parent 6726db0afb
commit 7ace455394
15 changed files with 195 additions and 18 deletions

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

View File

@ -1,3 +1,12 @@
Thu Jan 22 13:55:44 2004 Owen Taylor <otaylor@redhat.com>
* glib/gtimer.c: Add g_timer_continue().
(#98536, Tim-Philipp Müller)
* configure.in: Version 2.3.2, interface age 0.
* NEWS: tweak, finish.
Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de> Thu Jan 22 20:50:55 2004 Matthias Clasen <maclas@gmx.de>
* glib/gutils.c (g_get_any_init): Protect against * glib/gutils.c (g_get_any_init): Protect against

15
NEWS
View File

@ -1,21 +1,26 @@
Overview of Changes from GLib 2.3.1 to GLib 2.3.2 Overview of Changes from GLib 2.3.1 to GLib 2.3.2
================================================= =================================================
* Add G_MAXSIZE. [Manish Singh] * Add G_MAXSIZE. [Manish Singh]
* Add g_rand_new_with_seed_array(), g_rand_set_seed_array(), * Add g_rand_new_with_seed_array(), g_rand_set_seed_array(),
implementing the init-by-array functionality of the implementing the init-by-array functionality of the
original mersenne twister. [George Lebl] original mersenne twister. Add g_rand_copy(). Improve seeding.
[George Lebl]
* Add a lowercase_name option to glib-mkenums. [Murray Cumming] * Add a lowercase_name option to glib-mkenums. [Murray Cumming]
* Add g_ptr_array_foreach(). [Matthias Clasen] * Add g_ptr_array_foreach(). [Matthias Clasen]
* Fix a threadsafety issue in mem chunks. [Matthias] * Add g_timer_continue(). [Tim-Philipp Müller]
* Fix a threadsafety issue in mem chunks. [Matthias, Balazs Scheidler]
* Fix g_filename_{to,from}_utf8() on Win32 and improve * Fix g_filename_{to,from}_utf8() on Win32 and improve
g_file_test() there too [Hans Breuer] g_file_test() there too [Hans Breuer]
* Add a boxed type for NULL-terminated string arrays. [Matthias] * Add a boxed type for NULL-terminated string arrays. [Matthias]
* Add G_DEFINE_TYPE() plus variants to ease the constuction * Add G_DEFINE_TYPE() plus variants to ease the constuction
of GObject boilerplate code. [Tim Janik] of GObject boilerplate code. [Tim Janik]
* Support & in password GECOS field [Matthias, Soeren Boll Overgaard]
* Documentation improvements [Matthias, Manish] * Documentation improvements [Matthias, Manish]
* Misc bug fixes [Manish, Matthias, Owen Taylor] * Win32 build fixes [Hans]
* Updated translations (ar,nn,fa,de,mn,no,ga) * Misc bug fixes [Damien Carbery, Matthias, Manish, Olivier Poncet,
Zack Rusin]
* Updated translations (ar,de,fa,ga,mn,nn,no,sq)
Overview of Changes from GLib 2.3.0 to GLib-2.3.1 Overview of Changes from GLib 2.3.0 to GLib-2.3.1
================================================= =================================================

View File

@ -27,7 +27,7 @@ m4_include(m4macros/glib-gettext.m4)dnl
# #
m4_define([glib_major_version], [2]) m4_define([glib_major_version], [2])
m4_define([glib_minor_version], [3]) m4_define([glib_minor_version], [3])
m4_define([glib_micro_version], [1]) m4_define([glib_micro_version], [2])
m4_define([glib_interface_age], [0]) m4_define([glib_interface_age], [0])
m4_define([glib_binary_age], m4_define([glib_binary_age],
[m4_eval(100 * glib_minor_version + glib_micro_version)]) [m4_eval(100 * glib_minor_version + glib_micro_version)])

View File

@ -1,3 +1,8 @@
Thu Jan 22 14:51:19 2004 Owen Taylor <otaylor@redhat.com>
* glib/glib-sections.txt glib/tmpl/timers.sgml: Document
g_timer_continue. (Tim-Philipp Müller)
Sun Jan 11 01:25:44 2004 Matthias Clasen <maclas@gmx.de> Sun Jan 11 01:25:44 2004 Matthias Clasen <maclas@gmx.de>
* gobject/tmpl/gtype.sgml: Improve docs for G_DEFINE_TYPE_* macros. * gobject/tmpl/gtype.sgml: Improve docs for G_DEFINE_TYPE_* macros.

View File

@ -829,6 +829,7 @@ GTimer
g_timer_new g_timer_new
g_timer_start g_timer_start
g_timer_stop g_timer_stop
g_timer_continue
g_timer_elapsed g_timer_elapsed
g_timer_reset g_timer_reset
g_timer_destroy g_timer_destroy

View File

@ -52,6 +52,15 @@ between this end time and the start time.
@timer: a #GTimer. @timer: a #GTimer.
<!-- ##### FUNCTION g_timer_continue ##### -->
<para>
Resumes a timer that has previously been stopped with g_timer_stop().
g_timer_stop() must be called before using this function.
</para>
@timer: a #GTimer.
@Since: 2.4
<!-- ##### FUNCTION g_timer_elapsed ##### --> <!-- ##### FUNCTION g_timer_elapsed ##### -->
<para> <para>
If @timer has been started but not stopped, obtains the time since the timer was If @timer has been started but not stopped, obtains the time since the timer was

View File

@ -21,17 +21,6 @@ to the #GObject implementation and should never be accessed directly.
</para> </para>
<!-- ##### SIGNAL GObject::notify ##### -->
<para>
The notify signal is emitted on an object when one of its properties
has been changed. Note that getting this signal doesn't guarantee that the
value of the property has actually changed, it may also be emitted when
the setter for the property is called to reinstate the previous value.
</para>
@gobject: the object which received the signal.
@pspec: the #GParamSpec of the property which changed
<!-- ##### STRUCT GObjectClass ##### --> <!-- ##### STRUCT GObjectClass ##### -->
<para> <para>
The class structure for the <structname>GObject</structname> type. The class structure for the <structname>GObject</structname> type.
@ -866,3 +855,14 @@ properties in set_property() and get_property() implementations.
@pspec: the #GParamSpec of the property @pspec: the #GParamSpec of the property
<!-- ##### SIGNAL GObject::notify ##### -->
<para>
The notify signal is emitted on an object when one of its properties
has been changed. Note that getting this signal doesn't guarantee that the
value of the property has actually changed, it may also be emitted when
the setter for the property is called to reinstate the previous value.
</para>
@gobject: the object which received the signal.
@pspec: the #GParamSpec of the property which changed

View File

@ -118,6 +118,58 @@ g_timer_reset (GTimer *timer)
GETTIME (timer->start); GETTIME (timer->start);
} }
void
g_timer_continue (GTimer *timer)
{
#ifdef G_OS_WIN32
DWORD elapsed;
#else
struct timeval elapsed;
#endif /* G_OS_WIN32 */
g_return_if_fail (timer != NULL);
g_return_if_fail (timer->active == FALSE);
/* Get elapsed time and reset timer start time
* to the current time minus the previously
* elapsed interval.
*/
#ifdef G_OS_WIN32
elapsed = timer->end - timer->start;
GETTIME (timer->start);
timer->start -= elapsed;
#else /* !G_OS_WIN32 */
if (timer->start.tv_usec > timer->end.tv_usec)
{
timer->end.tv_usec += G_USEC_PER_SEC;
timer->end.tv_sec--;
}
elapsed.tv_usec = timer->end.tv_usec - timer->start.tv_usec;
elapsed.tv_sec = timer->end.tv_sec - timer->start.tv_sec;
GETTIME (timer->start);
if (timer->start.tv_usec < elapsed.tv_usec)
{
timer->start.tv_usec += G_USEC_PER_SEC;
timer->start.tv_sec--;
}
timer->start.tv_usec -= elapsed.tv_usec;
timer->start.tv_sec -= elapsed.tv_sec;
#endif /* !G_OS_WIN32 */
timer->active = TRUE;
}
gdouble gdouble
g_timer_elapsed (GTimer *timer, g_timer_elapsed (GTimer *timer,
gulong *microseconds) gulong *microseconds)

View File

@ -44,6 +44,7 @@ void g_timer_destroy (GTimer *timer);
void g_timer_start (GTimer *timer); void g_timer_start (GTimer *timer);
void g_timer_stop (GTimer *timer); void g_timer_stop (GTimer *timer);
void g_timer_reset (GTimer *timer); void g_timer_reset (GTimer *timer);
void g_timer_continue (GTimer *timer);
gdouble g_timer_elapsed (GTimer *timer, gdouble g_timer_elapsed (GTimer *timer,
gulong *microseconds); gulong *microseconds);

View File

@ -316,7 +316,7 @@ main (int argc,
GHashTable *hash_table; GHashTable *hash_table;
GMemChunk *mem_chunk; GMemChunk *mem_chunk;
GStringChunk *string_chunk; GStringChunk *string_chunk;
GTimer *timer; GTimer *timer, *timer2;
gint nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; gint nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
gint morenums[10] = { 8, 9, 7, 0, 3, 2, 5, 1, 4, 6}; gint morenums[10] = { 8, 9, 7, 0, 3, 2, 5, 1, 4, 6};
gchar *string; gchar *string;
@ -946,6 +946,56 @@ main (int argc,
g_print ("ok\n"); g_print ("ok\n");
g_print ("checking g_timer_continue...\n");
timer2 = g_timer_new ();
g_print ("\trun for 1 second...\n");
timer = g_timer_new();
g_usleep(G_USEC_PER_SEC); /* run timer for 1 second */
g_timer_stop(timer);
g_print ("\tstop for 1 second...\n");
g_usleep(G_USEC_PER_SEC); /* wait for 1 second */
g_print ("\trun for 2 seconds...\n");
g_timer_continue(timer);
g_usleep(2*G_USEC_PER_SEC); /* run timer for 2 seconds */
g_timer_stop(timer);
g_print ("\tstop for 1.5 seconds...\n");
g_usleep((3*G_USEC_PER_SEC)/2); /* wait for 1.5 seconds */
g_print ("\trun for 0.2 seconds...\n");
g_timer_continue(timer);
g_usleep(G_USEC_PER_SEC/5); /* run timer for 0.2 seconds */
g_timer_stop(timer);
g_print ("\tstop for 4 seconds...\n");
g_usleep(4*G_USEC_PER_SEC); /* wait for 4 seconds */
g_print ("\trun for 5.8 seconds...\n");
g_timer_continue(timer);
g_usleep((29*G_USEC_PER_SEC)/5); /* run timer for 5.8 seconds */
g_timer_stop(timer);
g_print ("\t=> total elapsed = %.2f seconds (should be: 9.00 seconds)\n\n", g_timer_elapsed(timer, NULL));
if (g_timer_elapsed(timer, NULL) > 8.8 && g_timer_elapsed(timer, NULL) < 9.2)
g_print ("g_timer_continue ... ok\n\n");
else
g_print ("g_timer_continue ... ***** FAILED *****\n\n");
g_timer_stop(timer2);
if (g_timer_elapsed(timer2, NULL) > (8.8+6.5) && g_timer_elapsed(timer2, NULL) < (9.2+6.5))
g_print ("timer2 ... ok\n\n");
else
g_print ("timer2 ... ***** FAILED *****\n\n");
g_timer_destroy(timer);
g_timer_destroy(timer2);
g_print ("checking g_ascii_strcasecmp..."); g_print ("checking g_ascii_strcasecmp...");
g_assert (g_ascii_strcasecmp ("FroboZZ", "frobozz") == 0); g_assert (g_ascii_strcasecmp ("FroboZZ", "frobozz") == 0);
g_assert (g_ascii_strcasecmp ("frobozz", "frobozz") == 0); g_assert (g_ascii_strcasecmp ("frobozz", "frobozz") == 0);