2016-08-17 76 views
1

像Qt这样的库提供了一个处理UI事件的事件循环,通常(或者总是?)封装OS UI事件循环以获得最佳结果。有没有办法编写一个没有事件循环的GUI?

现在我不禁想知道是否有方法来编写没有主事件循环的UI,以便它可以在所有主要操作系统上运行。

如果这是可能的,它将如何工作,并且在事件循环免费UI(最好是C++)中是否有任何示例?

+0

可能不是。抱歉。 –

+0

如果您不与操作系统的事件系统/队列交互,您(作为用户空间程序)将如何接收事件? –

+0

是的,但是您必须使用尚未发明的技术从头开始编写新的操作系统以响应用户交互。 –

回答

1

Windows和X11(Linux)都要求任何窗口对事件回调(或者是当前回答事件回调的窗口的父窗口)负责,否则操作系统会将它们视为停止响应 - 并在Windows上至少会触发“程序X已停止响应”弹出窗口。这些事件回调需要处理的语义是不同的(即Windows需要“创建窗口的线程”来处理它们,而Linux需要“主线程”来处理它们),但是原理是一样的。

我不熟悉MacOS,但我认为它有类似的逻辑。

+0

*** Linux ***有_windows_的概念吗?这对我来说是新的。你能否详细说明一下? –

+0

@πάνταῥεῖ呃,已更新。从字面上看,我使用的每一个版本的Linux都有一种或多种形式的GUI,所以我习惯将它们全部合并为“Linux”。 – Xirema

+0

X11确实有windows的概念,而X有一个事件循环。我想这就是所指的。但你绝对正确,那不是Linux *的东西 - 它是一个* X *的东西。 –

0

Allnmajor窗口框架我知道期望通过gui应用程序与事件循环交互。

现在,您可以包装ui框架交互,并将所述事件传送给事件广播者。

然后,应用程序只会订阅被通知。

现在,在某些情况下,窗口框架可能会要求来自消息的同步响应,所以在这些情况下,抽象会泄漏一点。但除此之外,你可以在客户端代码中使用事件循环免费的GUI应用程序(事件循环仍然存在,但仅限于跨平台库)。

一种想象在这样的框架中编程的方法是,你将设置ui小部件并将它们挂接到代码中,包括像“on app start”这样的挂钩,它可能会启动主窗口,从而挂钩更多的消息。

相关问题