gtimer
http://developer.gnome.org/glib/2.28/glib-Timers.html
TimersTimers — keep track of elapsed time |
Synopsis
#include <glib.h>
GTimer;
GTimer * g_timer_new (void);
void g_timer_start (GTimer *timer);
void g_timer_stop (GTimer *timer);
void g_timer_continue (GTimer *timer);
gdouble g_timer_elapsed (GTimer *timer,
gulong *microseconds);
void g_timer_reset (GTimer *timer);
void g_timer_destroy (GTimer *timer);
Description
GTimer records a start time, and counts microseconds elapsed since that time. This is done somewhat differently on different platforms, and can be tricky to get exactly right, so GTimer provides a portable/convenient interface.
Details
g_timer_new ()
GTimer * g_timer_new (void);
Creates a new timer, and starts timing (i.e. g_timer_start() is implicitly called for you).
|
Returns : |
a new GTimer. |
g_timer_start ()
void g_timer_start (GTimer *timer);
Marks a start time, so that future calls to g_timer_elapsed() will report the time since g_timer_start() was called. g_timer_new() automatically marks the start time, so no need to call g_timer_start() immediately after creating the timer.
|
|
a GTimer. |
g_timer_stop ()
void g_timer_stop (GTimer *timer);
Marks an end time, so calls to g_timer_elapsed() will return the difference between this end time and the start time.
|
|
a GTimer. |
g_timer_continue ()
void g_timer_continue (GTimer *timer);
Resumes a timer that has previously been stopped with g_timer_stop(). g_timer_stop() must be called before using this function.
|
|
a GTimer. |
Since 2.4
g_timer_elapsed ()
gdouble g_timer_elapsed (GTimer *timer,
gulong *microseconds);
If timer has been started but not stopped, obtains the time since the timer was started. If timer has been stopped, obtains the elapsed time between the time it was started and the time it was stopped. The return value is the number of seconds elapsed, including any fractional part. The microseconds out parameter is essentially useless.
Warning
Calling initialization functions, in particular g_thread_init(), while a timer is running will cause invalid return values from this function.
g_timer_reset ()
void g_timer_reset (GTimer *timer);
This function is useless; it's fine to call g_timer_start() on an already-started timer to reset the start time, so g_timer_reset() serves no purpose.
|
|
a GTimer. |
GTimer为GLib的计时器,他可以计算自计时器开始到现在的时间差。下面的程序在程序运行开始创建计时器,通过时钟回调函数定期的输出程序运行的时间值。
GTimer是個計時器,當您需要量測兩個執行時間點的間隔時就可以使用,例如程式執行的開始與結束時間,您可以使用g_timer_new()建立一個新的GTimer,若不再需要時則使用g_timer_destroy()加以毀棄。
在g_timer_new()之後,會自動標示啟動時間,您也可以使用g_timer_start()再度標示啟動時間,並於g_timer_elapsed()被呼叫時,傳回自啟動後的時間。
若使用g_timer_start()標示啟動時間,並使用g_timer_end()標示結束時間,則於g_timer_elapsed()被呼叫時,將傳回啟動後時間與結束時間的間隔,在使用g_timer_end()標示結束時間之後,您可以使用g_timer_continue()重新繼續GTimer的計時。
下面這個程式是個簡單的示範,可以計算兩次按鈕之間的時間間隔:
- g_timer_demo.c
#include <gtk/gtk.h>
void button_pressed(GtkButton *button, GTimer *timer) {
static gdouble elapsedTime;
static gboolean isRunning = FALSE;
if(isRunning) {
elapsedTime = g_timer_elapsed(timer, NULL);
gtk_button_set_label(button, "Start");
g_print("Elapsed Time: %f s\n", elapsedTime);
}
else {
g_timer_start(timer);
gtk_button_set_label(button, "Stop");
}
isRunning = !isRunning;
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;
GTimer *timer;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GTimer");
gtk_window_set_default_size(GTK_WINDOW(window), 150, 50);
button = gtk_button_new_with_label("Start");
gtk_container_add(GTK_CONTAINER(window), button);
timer = g_timer_new();
g_signal_connect(GTK_OBJECT(button), "clicked",
G_CALLBACK(button_pressed), timer);
g_signal_connect(GTK_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
一個執行的結果畫面如下所示:


浙公网安备 33010602011771号