常见工具库定时器分析(2)

717 阅读2分钟

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

glib

定时器在各种场景都需要用到,主要用途是执行定时任务。 看完了TBOX中的定时器,下面看一下 glib 的定时器。

Timer

GTimer 记录一个开始时间,并计算从那时起经过的微秒数。这在不同的平台上做得有些不同,而且可能很难做到完全正确,因此 GTimer 提供了一个可移植/方便的设置。

/**
 * GTimer:
 *
 * Opaque datatype that records a start time.
 **/
struct _GTimer
{
  guint64 start;
  guint64 end;
​
  guint active : 1;
};

由于包含函数过多,故结合分析,暂只调研以下内容。

g_timer_new ()

GTimer *
g_timer_new (void);

创建一个新的计时器,并开始计时(即隐式地为您调用 g_timer_start ())。

g_timer_start ()

void
g_timer_start (GTimer *timer);

标记一个开始时间,这样以后对 g_timer_elapsed ()的调用将报告自调用 g_timer_start ()以来的时间。g_ timer_new ()自动标记开始时间,因此不需要在创建计时器后立即调用 g_ timer_start ()

g_timer_stop ()

void
g_timer_stop (GTimer *timer);

标记结束时间,因此调用 g_timer_elapsed ()将返回结束时间和开始时间之间的差值。

g_timer_continue ()

void
g_timer_continue (GTimer *timer);

恢复以前用 gtimer_stop ()停止的计时器。在使用此函数之前必须调用 gtimer_stop ()

g_timer_elapsed ()

gdouble
g_timer_elapsed (GTimer *timer,
                 gulong *microseconds);

如果计时器已启动但尚未停止,则获得计时器启动后的时间。如果计时器已经停止,则获取从启动计时器到停止计时器的时间间隔。返回值是经过的秒数,包括任何小数部分。微秒输出参数基本上是无用的。

g_timer_reset ()

void
g_timer_reset (GTimer *timer);

这个函数是无用的; 可以在已经开始的计时器上调用 g_timer_start ()来重置开始时间,所以 g_timer_reset ()没有用处。

g_timer_destroy ()

void
g_timer_destroy (GTimer *timer);

销毁计时器,释放相关资源。

g_timer_is_active ()

gboolean
g_timer_is_active (GTimer *timer);

判断计时器当前是否处于活动状态