GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现

GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
作者: 刘鹏
日期: 2009-05-22
介绍了 GUI 主循环的设计思路,并分析了 MiniGUI, GTK, QT 的主循环。
简介

我们知道GUI应用程序都是事件驱动的。这些事件大部分都来自于用户,比如键盘事件、鼠标事件或笔点事件。还有一些事件来自于系统内部,比如定时事件、socket事件和其它文件事件等等。在没有任何事件的情况下,应用程序处于睡眠状态。1

因为这种事件驱动机制,GUI应用程序都毫无例外的需要一个主循环(main loop)。 主循环(main loop)控制应用程序什么时候进入睡眠状态,什么时候被唤醒。主 循环实现得好,应用程序才能工作正常又省电。1

目前常见的主循环设计主要是三种思路:

  1. 消息队列 + 信号量(semaphore) + sem_wait;
  2. 事件源 + select;
  3. 事件源 + poll。

对于第一种设计思路,主循环不断的从消息队列中提取消息分发给窗口,如果消 息队列中没有消息,主循环调用 sem_wait 进入休眠状态,直到有信息出现被唤 醒。MiniGUI的主循环就是这样实现的。

对于第二种思路,主循环使用 poll 函数监听事件源,若有事件出现则进行处理, 否则进入休眠状态,直到有事件到来。GTK+ 的主循环就是采用的这种思路。

第三种思路与第二种思路类似,不同之处是主循环使用 select 函数监听事件源, <

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值