• Idle函数的三大用途


    Idle函数的三大用途

     

    转载时请注明出处:http://blog.csdn.net/absurd/

     

    我们知道glib提供了一个名为g_idle_add的函数,这个函数的功能很容易理解:增加一个空闲任务,让应用程序在空闲时执行指定的函数。这种机制非常有用,如果没有这种机制,很多事情将非常麻烦。它的功能虽然简单,但并不是所有人都知道如何充分发挥它的潜力,这里说说它的几个主要用途吧。

     

    1.         在空闲时执行低优先级任务。有的任务优先级比较低,但费耗时间比较长,像屏幕刷新等操作,我们不希望它阻碍当前操作太久,此时可以把它放到空闲任务里去做。实际上GTK+里面也是这样做的,这样可以获得更好的响应性。

     

    2.         将同步操作异步化。我们知道在GTK+中,它使用glibsignal作为窗口/控件之间的通信方式,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~~

     

     
  • 相关阅读:
    perl中的反勾号(``),system和exec
    经典的JavaScript效果
    关于Asp.net ajax下的异常处理
    史上最酷的IIS一键安装,你想要吗? 博客园全球首发
    下载最新的AjaxControlToolkit控件包
    Asp.net开发中不可靠的编码习惯
    用Ajax保持会话
    对ViewState的一点思考
    对微软Asp.net Ajax 1.0的AutoComplete控件的几处修正和增强
    还为安装IIS发愁吗?全系列IIS自动安装程序倾囊奉送!--技术原理介绍及成品下载
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167834.html
Copyright © 2020-2023  润新知