仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 528|回复: 7
打印 上一主题 下一主题

[其他Linux] Linux设计g_timeout_add ()仓酷云

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:22:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基的。
在GTK中,假如您要准时让程序往作某件事,则可使用g_timeout_add()或g_timeout_add_full().一个例子以下:
  1. 这个例子的感化就是把以后工夫显现到窗口中,即显现了一个及时时钟。
复制代码
  1. //~~~~~~~beginofprogram~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
复制代码
  1. #include<cairo.h>#include<gtk/gtk.h>#include<time.h>staticcharbuffer[256];
复制代码
  1. /*******************************把buffer显现到窗口中
复制代码
  1. *每次画窗口时挪用
复制代码
  1. */staticgbooleanon_expose_event(GtkWidget*widget,GdkEventExpose*event,gpointerdata){cairo_t*cr;cr=gdk_cairo_create(widget->window);cairo_move_to(cr,30,30);cairo_show_text(cr,buffer);cairo_destroy(cr);returnFALSE;}
复制代码
[/code]
  1. [/code][code]/*******************************把以后工夫打印到buffer中,而且重画窗口
复制代码
  1. *每次timeout后挪用,即每秒挪用一次
复制代码
  1. */staticgbooleantime_handler(GtkWidget*widget){if(widget->window==NULL)returnFALSE;time_tcurtime;structtm*loctime;curtime=time(NULL);loctime=localtime(&curtime);strftime(buffer,256,"%T",loctime);gtk_widget_queue_draw(widget);returnTRUE;}
复制代码
  1. //~~~~~~~beginofprogram~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~0
复制代码
  1. //~~~~~~~beginofprogram~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1
复制代码
[/code][/code][/code]例子
http://zetcode.com/tutorials/gtktutorial/gtkevents/
这两个函数的申明见下:

g_timeout_add()
  1. //~~~~~~~beginofprogram~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2
复制代码
Setsafunctiontobecalledatregularintervals,withthedefaultpriority,G_PRIORITY_DEFAULT.ThefunctioniscalledrepeatedlyuntilitreturnsFALSE,atwhichpointthetimeoutisautomaticallydestroyedandthefunctionwillnotbecalledagain.Thefirstcalltothefunctionwillbeattheendofthefirstinterval.
Notethattimeoutfunctionsmaybedelayed,duetotheprocessingofothereventsources.Thustheyshouldnotbereliedonforprecisetiming.Aftereachcalltothetimeoutfunction,thetimeofthenexttimeoutisrecalculatedbasedonthecurrenttimeandthegiveninterval(itdoesnottrytocatchuptimelostindelays).
interval:thetimebetweencallstothefunction,inmilliseconds(1/1000thsofasecond)function:functiontocalldata:datatopasstofunctionReturns:theID(greaterthan0)oftheeventsource.
第一个参数是距离的毫秒数,第二个参数是准时后的callback,第三个是传送给callback的数据。callback的情势以下:

ginttimeout_callback(gpointerdata);

g_timeout_add的前往值能够用来停止这个timeout,以下(假设前往放到tag中)

voidg_source_remove(ginttag);

也能够让callback前往0或FALSE来停止timeout。

更多的参考可见GTK+tutorial相干章节:

http://library.gnome.org/devel/gtk-tutorial/stable/c1761.html#SEC-TIMEOUTS





g_timeout_add_full()
  1. //~~~~~~~beginofprogram~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3
复制代码
Setsafunctiontobecalledatregularintervals,withthegivenpriority.ThefunctioniscalledrepeatedlyuntilitreturnsFALSE,atwhichpointthetimeoutisautomaticallydestroyedandthefunctionwillnotbecalledagain.Thenotifyfunctioniscalledwhenthetimeoutisdestroyed.Thefirstcalltothefunctionwillbeattheendofthefirstinterval.
Notethattimeoutfunctionsmaybedelayed,duetotheprocessingofothereventsources.Thustheyshouldnotbereliedonforprecisetiming.Aftereachcalltothetimeoutfunction,thetimeofthenexttimeoutisrecalculatedbasedonthecurrenttimeandthegiveninterval(itdoesnottrytocatchuptimelostindelays).
priority:thepriorityoftheidlesource.TypicallythiswillbeintherangebetweenG_PRIORITY_DEFAULT_IDLEandG_PRIORITY_HIGH_IDLE.interval:thetimebetweencallstothefunction,inmilliseconds(1/1000thsofasecond)function:functiontocalldata:datatopasstofunctionnotify:functiontocallwhentheidleisremoved,orNULLReturns:theID(greaterthan0)oftheeventsource.

学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。
老尸 该用户已被删除
7#
发表于 2015-3-20 22:23:23 | 只看该作者
查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。
山那边是海 该用户已被删除
6#
发表于 2015-3-14 00:05:11 | 只看该作者
熟读写基础知识,学得会不如学得牢。
冷月葬花魂 该用户已被删除
5#
发表于 2015-3-7 01:24:54 | 只看该作者
你需要提供精确有效的信息。Linux这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。
飘灵儿 该用户已被删除
地板
发表于 2015-2-12 00:43:52 | 只看该作者
首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。
小妖女 该用户已被删除
板凳
发表于 2015-2-6 08:13:42 | 只看该作者
最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
不帅 该用户已被删除
沙发
发表于 2015-1-30 07:26:12 | 只看该作者
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
只想知道 该用户已被删除
楼主
发表于 2015-1-20 22:52:14 | 只看该作者
最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 00:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表