简介
GLib提供的timer不是定时器,而是一个计时器,记录程序运行时间的流逝,在程序调优或性能优化时非常有用,可以很方便地计算某段代码的实际执行时间。本计时器还支持暂停恢复及重启操作。
数据结构
GTimer是一个不透明类型数据结构,可以整体使用它,但无法单独引用其内部的一个结构体成员。
typedef struct _GTimer GTimer;
函数列表
GTimer * g_timer_new ()
void g_timer_start ()
void g_timer_stop ()
void g_timer_continue ()
gdouble g_timer_elapsed ()
void g_timer_reset ()
void g_timer_destroy ()
函数功能分类
// 创建,创建一个计时器,当计时器不再使用时需要调用g_timer_destroy销毁计时器。
GTimer * g_timer_new ()
// 启动。启动计时器,开始计时。
void g_timer_start ()
// 停止。停止对计时器的计时,如果需要恢复,可以使用g_timer_continue函数。
void g_timer_stop ()
// 继续。对已经停止的计时器重新计时。
void g_timer_continue ()
// 历时。返回计时器从开始计时到现在为止运行的总时间。如果计时器被停止过,停止期间的时间不会被计算在内。
gdouble g_timer_elapsed ()
// 重置。重置一个计时器。本函数完全可以被g_timer_start替代。当对一个正在运行的计时器调用g_timer_start时,会重置该计时器并重新计时。
void g_timer_reset ()
// 销毁。销毁一个计时器。
void g_timer_destroy ()
函数功能说明及综合演示
计时器功能演示。
源码见glib_examples\glib_timer\glib_timer_all
#include <glib.h>
static void test_timer(void)
{
GTimer *timer = NULL;
g_print("\n");
timer = g_timer_new();
g_timer_start(timer);
g_print("start, elapsed: %f \n", g_timer_elapsed(timer, NULL));
g_timer_stop(timer);
g_usleep(100*1000);
g_print("stop, elapsed: %f \n", g_timer_elapsed(timer, NULL));
g_timer_continue(timer);
g_usleep(200*1000);
g_print("continue, elapsed: %f \n", g_timer_elapsed(timer, NULL));
g_usleep(300*1000);
g_print("continue2, elapsed: %f \n", g_timer_elapsed(timer, NULL));
g_timer_reset(timer);
g_print("reset, elapsed: %f \n", g_timer_elapsed(timer, NULL));
g_timer_destroy(timer);
return;
}
gint main(gint argc, gchar **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_add_func ("/timer/basic", test_timer);
return g_test_run();
}
运行结果:
[root@centos7 glib_timer_all]# ./glib_timer_all
/timer/basic:
start, elapsed: 0.000001
stop, elapsed: 0.000015
continue, elapsed: 0.200425
continue2, elapsed: 0.500671
reset, elapsed: 0.000000
OK