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

定时器的创建:

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进阶学习:定时器相关推荐

  1. JQuery进阶学习

     JQuery进阶学习的内容         1. 动画         2. 遍历         3. 事件绑定         4. 案例         5. 插 一. 动画 三种方式显示和隐 ...

  2. UnrealEngine蓝图进阶学习笔记(六):按波次生成敌人

    UnrealEngine蓝图进阶学习笔记(六):按波次生成敌人 2020.04.03 一.创建敌人生成点及相关变量 1.部署生成点 左部面板搜索TargetPoint至场景(2250,0,0),ctr ...

  3. 3D视觉从入门到进阶学习路线

    01 什么是知识星球? 知识星球是一个高度活跃的社区平台,在这里你可以和相同研究方向的小伙伴一起探讨科研工作难题.交流最新领域进展.分享paper资料.发布高质量的求职就业信息,当然还可以侃侃而谈,吐 ...

  4. android java服务,Android进阶学习必会:Java Binder中的系统服务

    前言 这个知识点是Android进阶学习必须掌握的知识点之一,也是高阶Android架构师经常问到的点.在这里分想给大家,希望对大家的工作和学习有所帮助.喜欢本文的记得点赞关注哦~ 在前面的Andro ...

  5. leetcode与python进阶学习总结

    转自:leetcode与python进阶学习总结 l1是一个链表型,val是其属性,以下句子意义为如果l1不为空则取l1.val否则取0,节省代码空间,干净利落 x= l1.val if l1 els ...

  6. opencv进阶学习笔记3:像素运算和图像亮度对比度调节

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...

  7. 单链表进阶学习 三段

    单链表进阶学习 三段 从尾到头打印单链表: 思路: 实际意义就是逆序打印单链表: 利用栈的操作,先进后出,实现逆序打印效果. (注:不建议直接对单链表进行反转操作.这样会破坏链表本身的结构,在做题和练 ...

  8. 单链表进阶学习 二段

    单链表进阶学习 二段 单链表的反转 思路: 定义一个新节点,reserveHead=new HeroNode(); 利用辅助变量cur遍历原来的链表,每遍历一个节点就将其取出,放在新建链表的最前端:( ...

  9. JavaSE进阶学习笔记-目录汇总(待完成)

    声明:此博客来自于黑马程序员学习笔记,并非商用,仅仅是为了博主个人日后学习复习用,如有冒犯,请联系qq208820388立即删除博文,最后,来跟我一起喊黑马牛逼黑马牛逼黑马牛逼 JavaSE进阶学习笔 ...

最新文章

  1. 互联网Scratch编程趣味课:不插电编程和计算机对话[图]
  2. python php array,python处理PHP数组文本文件实例
  3. 机器学习-算法背后的理论与优化(part3)--经验风险与泛化误差概述
  4. vector向量容器
  5. spring学习-xml属性注入-数组--list--map--set类型
  6. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_13使用骨架创建maven的web工程...
  7. jmx 监控java程序_监控Java Web应用程序 – JMX是正确的选择吗?
  8. Editormd的使用——在线编辑和查看文章
  9. git提示Can‘t update: no tracked branch
  10. MB/s MiB/s之间换算
  11. 网络割接方案模板(范文)
  12. 永远不会被杀的***捆绑机
  13. java正则表达式过滤特殊字符_使用Java正则表达式过滤特殊字符
  14. 【用es6写个机选彩票】
  15. android:ellipsize属性
  16. access设计视图
  17. 【小狐狸 - 横版游戏开发】1.编辑素材 Til
  18. 用U盘安装系统完全教程
  19. 【阿里云】第一次进行域名注册、备案以及使用全过程
  20. android 平板怎么刷机,小白必看,安卓平板电脑刷机教程之一键刷机

热门文章

  1. 计算机视觉:场景识别(Scene Recognition)
  2. >adb: error: failed to copy ‘xx.apk‘ to ‘/system/app/test1.apk‘:remote Permission denied
  3. 转转上市进度加快:旗下企业再度整合变更,变成爱回收的模仿者?
  4. 【微信小程序系列:五】小程序适老化自动适配工具miniprogram-elder-transform---微信老年关怀模式下小程序字体适配微信字体
  5. java计算机毕业设计医院管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  6. 关于电商搜索中Elasticsearch的正确使用姿势--配置篇
  7. 蓝牙mesh基本概念讲解
  8. 国内有哪些知名IDC机房?
  9. 达梦数据库字符串连接用什么符号?
  10. 欺骗的艺术——第二部分(5)