1

LinuxでXlibを使用しているマルチプラットフォームのOpenGLアプリケーションに取り組んでいます。Xlibの入力処理はイベントベースであると理解していますが、私のプログラムはすでに独自のイベント処理を行っており、前回のポーリング以降にアクティブなウィンドウで押された、または上げられたキーについてxserverをポーリングできるようにしたいと思います。 。

Xでイベントベースの入力処理を使用する必要がある場合、イベントメソッドはプラットフォームごとに大きく異なるため、多くのコードを書き直しながら、他のプラットフォームでも同じことを行う必要があります。ポーリングは私にとって本当に物事を単純化するでしょう、しかし私はこのようなものでかなりのオーバーヘッドがあるのではないかと心配しています、そして私はそれがどのように行われるべきかについての情報さえ得ることができませんでした。/ dev / input / eventXノードを直接チェックすることを考えましたが、単純化するのではなく、おそらくもっと複雑になるでしょう。

私が本当に知りたいのは、Linuxシステムでキーボードの状態を効率的にポーリングする方法です。Xlibで時間を無駄にしていますか?他の手法やライブラリを検討する必要がありますか?

4

2 に答える 2

2

効率的にポーリングするために、私は通常select(on ConnectionNumber) を使用して、X への接続で何かが発生するまで待機し、その後、何かを取得するためXPendingに使用します。ブロックしない限り、XNextEvent呼び出さないでください。XNextEventXPending

便利なことにselect、タイムアウト メカニズムが提供されているため、他の処理 (描画など) を行うための定期的な待機を簡単に停止することもできます。

于 2013-01-06T22:16:09.037 に答える
0

ポーリングとは、プログラムのどこかにループがあることを意味します。XPending を使用して、サーバーから何か新しいものがあるかどうかを確認し (それがあなたのポーリングです)、XNextEvent を使用してそれを読み取ります。

于 2013-01-06T23:29:29.933 に答える