【发布时间】:2011-06-29 23:41:34
【问题描述】:
我刚刚完成了一些使用 SDL 的简单程序,这让我想起了我编写的一些 Java GUI。
在简单的 SDL 程序中,我有一个循环来检查任何事件(按键、鼠标点击等)并对其做出反应。本质上是轮询输入。
在 Java 中,您将侦听器附加到 GUI 对象,并且当某些事件发生时会触发侦听器。
我的问题是,Java 是否只是在后台为我们处理这个轮询循环并计算出单击了哪个 GUI 控件以便触发正确的侦听器之类的事情,还是发生了更复杂的事情?
我知道 Qt 具有与 Java 类似的事件系统,您可以使用插槽将处理程序连接到 GUI 控件。这是否也只是处理所有轮询并确定为我们单击了哪个控件?或者,是否发生了更复杂的事情?
更新
也许我对这个问题不够清楚。我真的很想找出事件如何桥接操作系统层 - 应用程序层边界。应用程序是否轮询操作系统层并将事件信息拉入应用程序?或者操作系统是否有某种方式来中断/通知应用程序发生了事件并将事件信息推送到应用程序。
有人向我建议了第三种解决方案,即应用程序调用阻塞本机函数,例如:
Event e = someNativeFunction(); // blocks until someNativeFunction() returns an event
【问题讨论】:
标签: java c++ events event-handling