The Official GNOME 2 Developer's Guide GLib (三)
The Official GNOME 2 Developer's Guide GLib (五)

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 , 1950 阅读

 

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] 如果在编译这个程序的时候没有打开编译优化,这个循环就会被执行。

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter