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进阶学习:定时器相关推荐
- JQuery进阶学习
JQuery进阶学习的内容 1. 动画 2. 遍历 3. 事件绑定 4. 案例 5. 插 一. 动画 三种方式显示和隐 ...
- UnrealEngine蓝图进阶学习笔记(六):按波次生成敌人
UnrealEngine蓝图进阶学习笔记(六):按波次生成敌人 2020.04.03 一.创建敌人生成点及相关变量 1.部署生成点 左部面板搜索TargetPoint至场景(2250,0,0),ctr ...
- 3D视觉从入门到进阶学习路线
01 什么是知识星球? 知识星球是一个高度活跃的社区平台,在这里你可以和相同研究方向的小伙伴一起探讨科研工作难题.交流最新领域进展.分享paper资料.发布高质量的求职就业信息,当然还可以侃侃而谈,吐 ...
- android java服务,Android进阶学习必会:Java Binder中的系统服务
前言 这个知识点是Android进阶学习必须掌握的知识点之一,也是高阶Android架构师经常问到的点.在这里分想给大家,希望对大家的工作和学习有所帮助.喜欢本文的记得点赞关注哦~ 在前面的Andro ...
- leetcode与python进阶学习总结
转自:leetcode与python进阶学习总结 l1是一个链表型,val是其属性,以下句子意义为如果l1不为空则取l1.val否则取0,节省代码空间,干净利落 x= l1.val if l1 els ...
- opencv进阶学习笔记3:像素运算和图像亮度对比度调节
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...
- 单链表进阶学习 三段
单链表进阶学习 三段 从尾到头打印单链表: 思路: 实际意义就是逆序打印单链表: 利用栈的操作,先进后出,实现逆序打印效果. (注:不建议直接对单链表进行反转操作.这样会破坏链表本身的结构,在做题和练 ...
- 单链表进阶学习 二段
单链表进阶学习 二段 单链表的反转 思路: 定义一个新节点,reserveHead=new HeroNode(); 利用辅助变量cur遍历原来的链表,每遍历一个节点就将其取出,放在新建链表的最前端:( ...
- JavaSE进阶学习笔记-目录汇总(待完成)
声明:此博客来自于黑马程序员学习笔记,并非商用,仅仅是为了博主个人日后学习复习用,如有冒犯,请联系qq208820388立即删除博文,最后,来跟我一起喊黑马牛逼黑马牛逼黑马牛逼 JavaSE进阶学习笔 ...
最新文章
- 互联网Scratch编程趣味课:不插电编程和计算机对话[图]
- python php array,python处理PHP数组文本文件实例
- 机器学习-算法背后的理论与优化(part3)--经验风险与泛化误差概述
- vector向量容器
- spring学习-xml属性注入-数组--list--map--set类型
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_13使用骨架创建maven的web工程...
- jmx 监控java程序_监控Java Web应用程序 – JMX是正确的选择吗?
- Editormd的使用——在线编辑和查看文章
- git提示Can‘t update: no tracked branch
- MB/s MiB/s之间换算
- 网络割接方案模板(范文)
- 永远不会被杀的***捆绑机
- java正则表达式过滤特殊字符_使用Java正则表达式过滤特殊字符
- 【用es6写个机选彩票】
- android:ellipsize属性
- access设计视图
- 【小狐狸 - 横版游戏开发】1.编辑素材 Til
- 用U盘安装系统完全教程
- 【阿里云】第一次进行域名注册、备案以及使用全过程
- android 平板怎么刷机,小白必看,安卓平板电脑刷机教程之一键刷机
热门文章
- 计算机视觉:场景识别(Scene Recognition)
- >adb: error: failed to copy ‘xx.apk‘ to ‘/system/app/test1.apk‘:remote Permission denied
- 转转上市进度加快:旗下企业再度整合变更,变成爱回收的模仿者?
- 【微信小程序系列:五】小程序适老化自动适配工具miniprogram-elder-transform---微信老年关怀模式下小程序字体适配微信字体
- java计算机毕业设计医院管理系统源码+数据库+系统+lw文档+mybatis+运行部署
- 关于电商搜索中Elasticsearch的正确使用姿势--配置篇
- 蓝牙mesh基本概念讲解
- 国内有哪些知名IDC机房?
- 达梦数据库字符串连接用什么符号?
- 欺骗的艺术——第二部分(5)