2016-08-17 109 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」這樣的掛鉤,它可能會啓動主窗口,從而掛鉤更多的消息。

相關問題