码迷,mamicode.com
首页 > 其他好文 > 详细

GTK进阶学习:定时器

时间:2015-07-30 11:29:43      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:gtk

定时器在应用编程里用得很广,我们手机里的闹钟,幻灯片播放图片等应用都用到定时器。定时器,每隔一段时间干一件事(程序里表现为调用一个函数),像闹钟,每隔一天响一次。


定时器的创建:

guint g_timeout_add(guint interval, GSourceFunc function, gpointer data);

interval:设置的时间间隔,以毫秒为单位( 1000即为1秒 )

function:回调函数的名字

data:给回调函数传的参数

返回值:定时器id号


使用实例:

guint timer = g_timeout_add(500, (GSourceFunc)deal_time, NULL);

每隔500ms会执行一次deal_time()回调函数。


注意:当回调函数返回值为FALSE时,定时器执行一次后便会停止工作,不再循环执行。所以,要想定时器连续工作,循环执行所指定的回调函数,应该返回TRUE。


定时器的移除:

gboolean g_source_remove(guint tag);
tag:定时器id号

返回值:TRUE代表成功,FALSE代表失败


倒计时实例如下:

#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>

guint timer = 0;//定时器id

void set_widget_font_size(GtkWidget *widget, int size, int is_button)  
{  
            GtkWidget *labelChild;    
            PangoFontDescription *font;    
            gint fontSize = size;    
          
            font = pango_font_description_from_string("Sans");//"Sans"字体名     
            pango_font_description_set_size(font, fontSize*PANGO_SCALE);//设置字体大小     
          
            if(is_button){  
                labelChild = gtk_bin_get_child(GTK_BIN(widget));//取出GtkButton里的label    
            }else{  
                labelChild = widget;  
            }  
          
            //设置label的字体,这样这个GtkButton上面显示的字体就变了  
            gtk_widget_modify_font(GTK_WIDGET(labelChild), font);  
            pango_font_description_free(font);  
}  


gboolean deal_time( gpointer* label )   
{  
    char buf[5] = "";  
    static int num = 10;  
    num--;  
    sprintf(buf, "%d", num);  
    gtk_label_set_text(GTK_LABEL(label), buf);  
  
    if(0 == num){  
        num = 11;  
        //g_source_remove(timer); // 移除定时器   
    }  
  
    return TRUE;//尽量返回TRUE  
}  
  


int main(int argc,char *argv[])
{
        //1.gtk环境初始化
        gtk_init(&argc, &argv);

        //2.创建一个窗口
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        //设置窗口标题
        gtk_window_set_title(GTK_WINDOW(window), "倒计时");
        //设置窗口宽度
        gtk_container_set_border_width(GTK_CONTAINER(window), 0);


        //3.设置窗口默认大小
        gtk_window_set_default_size(GTK_WINDOW(window), 320, 400);

        //设置窗口在显示器中间位置
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

        //4.倒计时显示区
        GtkWidget *label = gtk_label_new("10");
        set_widget_font_size(label, 230, FALSE);
        gtk_container_add(GTK_CONTAINER(window), label);

        //定时器的创建,label传给回调函数
        timer = g_timeout_add(500, (GSourceFunc)deal_time, (gpointer)label);

        //显示所有窗口
        gtk_widget_show_all(window);

        //主事件
        gtk_main();


        return 0;
}

运行结果:

技术分享



源码下载:http://download.csdn.net/download/lianghe_work/8945293

转自:

版权声明:本文为博主原创文章,未经博主允许不得转载。

GTK进阶学习:定时器

标签:gtk

原文地址:http://blog.csdn.net/lianghe_work/article/details/47144941

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!