Idle函数的三大用途
来源:互联网 发布:除甲醛空气净化器 知乎 编辑:程序博客网 时间:2024/04/30 00:07
Idle函数的三大用途
转载时请注明出处:http://blog.csdn.net/absurd/
我们知道glib提供了一个名为g_idle_add的函数,这个函数的功能很容易理解:增加一个空闲任务,让应用程序在空闲时执行指定的函数。这种机制非常有用,如果没有这种机制,很多事情将非常麻烦。它的功能虽然简单,但并不是所有人都知道如何充分发挥它的潜力,这里说说它的几个主要用途吧。
1. 在空闲时执行低优先级任务。有的任务优先级比较低,但费耗时间比较长,像屏幕刷新等操作,我们不希望它阻碍当前操作太久,此时可以把它放到空闲任务里去做。实际上GTK+里面也是这样做的,这样可以获得更好的响应性。
2. 将同步操作异步化。我们知道在GTK+中,它使用glib的signal作为窗口/控件之间的通信方式,signal的执行是直接调用函数,即整个signal的执行过程是同步完成的。这在多数情况下工作得很好,但有时会出现重入的问题,你调我,我再调你,可能会遇到麻烦。此时我们不得不采用异步方式,而GTK+没有提供像Win32下的PostMessage之类的异步消息,幸好我们可以用g_idle_add函数来模拟。
3. 串行化对GUI的访问。在大多数平台下,对GUI资源的访问都是需要串行化的,即在一个GUI应用程序中,只有一个线程可以直接操作GUI资源。这是因为出于效率的考虑, GUI资源是没有加锁保护的,GTK+也是这样的。如果另外一个线程要访问GUI资源,比如要显示一条信息,怎么办呢?这可以通过g_idle_add增加一个空闲任务来实现,idle任务是GUI线程(主线程)中执行的,所以串行了对GUI资源的访问。
这里要注意,idle任务并不是一个独立的线程或者进程,而在是主线程中执行的。所谓空闲是指,当main loop没有其它消息要处理,而且没有更高优先级的工作要做时,就认为处于空闲状态。
~~~end~~
- Idle函数的三大用途
- C++中指针的三大用途
- meta的大用途
- 盘点JavaScript中Function三大用途
- sigmoid函数的用途
- WSAStartup函数的用途
- 函数指针的用途
- MTK idle界面涉及的函数
- eval函数的用途 javascript
- private 构造函数的用途
- 公共函数 data_auth_sign 的用途
- Pb中idle事件的用处及idle(N)函数的用法:
- Pb中idle事件的用处及idle(N)函数的用法:
- 匪夷所思的未来手机十大用途
- android FakeWindow的小应用大用途
- mysql之表别名的大用途
- mtk idle界面函数
- MTK IDLE 函数详解
- 个性新闻自动采集系统
- WEB 编程
- 各种服务器上配置用手机下载kjava游戏的方法
- 服务器环境变量的集合ServerVariables
- 吃的
- Idle函数的三大用途
- 今天刚注册
- 八大名茶,铁观音为首
- 一壶香茗 一口清甜
- 泡壶好茶讲究多
- 请对“症”择茶
- 物是人非
- 中国茶
- 中国十大名茶