The Official GNOME 2 Developer's Guide GLib (四)
Yu
posted @ 2011年8月16日 17:19
in The Official GNOME 2 Developer's Guide GLib
with tags
c gnome gtk
, 1944 阅读
1.4.5 定时器
只要你系统上的时钟够准确,Gtimer的精度可以超过了秒表。
下面是一个例子:
/* gtimerdemo.c -- demonstration of GTimer */ #include <glib.h> #define DURATION 200000 int main(int argc, char **argv) { GTimer *clock = NULL; gint i; gdouble elapsed_time; gulong us; /* microseconds */ clock = g_timer_new(); g_timer_start(clock); g_print("Timer started.\n"); g_print("Loop started.. "); for (i = 0; i < DURATION; i++) { ; } /* wasting CPU time like this is only allowed in programming examples */ g_print("and finished.\n"); g_timer_stop(clock); g_print("Timer stopped.\n"); elapsed_time = g_timer_elapsed(clock, &us); g_print("Elapsed: %g s\n", elapsed_time); g_print(" %ld us\n", us); g_timer_destroy(clock); return 0; }
你需要了解的Gtimer都在这个小例子里面。clock变量是一个Gtimer数据结构的指针,一开始我们设置为NULL。为了创建Gtimer这个结构,我们调用g_timer_new()函数,返回值就是我们要的clock指针。(一个Gtimer结构的新指针)。
我们用函数g_timer_start()来启动我们刚刚生成的时钟。事实上这个程序在运行着一个循环,除此之外什么也没有做,就是浪费cpu的时间而已。[1]。之后,我们用函数g_timer_stop()来停止及时。
当我要获得此刻计数器的计数结果的时候,调用:
time = g_timer_elapsed(timer, us_ptr);
它的返回值是经过时间的秒数,并且是一个双精度的浮点数。此外,如果你需要获得微妙级的小数部分,你可以传入一个gulong变量的指针作为us_ptr。因为这个数字没有包括完整的秒数树脂,所以第二部分的积分要乘以100万来进行类型转换。如果你想要一个微秒的总数的话。(ps:后面这句翻译的@#¥#@¥@!#¥)
注意:
如果你不关心到微秒,us_ptr可以设置为NULL。
最后,你可以用函数g_timer_reset(timer)重新设置定时器。不用定时器的时候,你需要销毁它g_timer_destroy(timer)。
[1] 如果在编译这个程序的时候没有打开编译优化,这个循环就会被执行。