2013-01-06 62 views
1

我正在開發一個多平臺的OpenGL應用程序,爲此我在Linux下使用Xlib。我明白Xlib輸入處理是基於事件的強烈的,但我的程序已經做了自己的事件處理,而且我更願意輪詢xserver以查找自上次輪詢以來在活動窗口下按下或提出的任何鍵。Xlib鍵盤輪詢

如果我必須在X下使用基於事件的輸入處理,那麼在重寫大量代碼時,我必須對其他平臺執行相同的操作,因爲事件方法對於不同的平臺而言是如此不同。輪詢會真正爲我簡化一些事情,但是恐怕會有這樣的事情發生,而且我還沒有能夠獲得有關應該如何完成的信息。我想直接檢查/ dev/input/eventX節點,但這可能會使事情更加複雜,而不是簡化。

我真正想知道的是如何有效地輪詢Linux系統上的鍵盤狀態。我是否在Xlib上浪費時間,是否應該考慮其他技術或庫?

+0

「事件方法從一個平臺到另一個平臺是如此不同」......什麼?我*相當*確定他們都基於「鑰匙落下」和「鑰匙出現」... –

+0

我建議你調查SDL或SFML來抽象出這種事情。 – singpolyma

+0

你甚至不能輪詢/ dev/input/eventX,我的意思是這個名字本身已經表明它是基於事件的。 – datenwolf

回答

1

爲了有效地輪詢,我通常使用select(上ConnectionNumber),要等到事情發生在連接到X,然後同時XPending我用XNextEvent搶東西。請勿撥打XNextEvent,除非XPending否則會阻止。

方便地,select提供了一個超時機制,所以你也可以停止週期性地等待做其他事情(比如繪圖)。

0

輪詢意味着,你的程序中會有一些循環。使用XPending來檢查服務器是否有新東西(這是您的投票),然後使用XNextEvent來讀取它。