首页 > 代码库 > GTK进阶学习:定时器
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; // 定时器id /* 功能: 设置控件字体大小 * widget: 需要改变字体的控件 * size: 字体大小 * is_button: TRUE代表控件为按钮,FALSE为其它控件 */ 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); } /* 功能: 定时器处理函数 * label: 主要用于显示数字 */ 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[]) { gtk_init(&argc, &argv); /////////////////主窗口操作 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "倒计时"); gtk_container_set_border_width(GTK_CONTAINER(window), 0); //设置窗口默认大小,设置一个最小大小 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 ); //按关闭按钮可以把程序中断 // 倒计时显示区域 GtkWidget *label = gtk_label_new("10"); // label的创建 set_widget_font_size(label, 230, FALSE); // 设置label的字体大小 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; }
程序运行效果图如下:
源代码下载请点此处。
GTK进阶学习:定时器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。