0

Linux で C++ の UART (Boost::asio を使用したシリアル) によって駆動される OpenGL ソフトウェアを作成しています。

現在、データの受信と処理は完了しており、OpenGL で視覚化する準備ができています。とにかく私の質問は次のとおりです。

UART コールバック関数から OpenGL 描画関数を呼び出すにはどうすればよいですか?

もちろん、次の方法で実行できるはずです。

  1. IPC(PIPE、ソケット、セマフォ)メソッドのいずれかを使用する
  2. OpenGL 描画関数またはそのクラスを変数として UART コールバックに渡します
  3. すべてを 1 つのクラスにまとめる

私は非常に多くの同様のケースに遭遇し、さまざまな方法で実装しました。しかし、私はまだ正しい答えが何であるかを理解できません。

私は個人的に PIPE やファイル IO IPC が好きではありません。残っている唯一のオプションは、ソケット、セマフォ、および私が常に使用している共有メモリです。

4

2 に答える 2

0

もちろん、アプリケーションによって異なります。

シリアル通信コールバック関数がOpenGL状態にアクセスすることは非常に理にかなっていますが、プロトタイプ/概念実証を行っている場合、なぜ仕事を難しくするのでしょうか。

共有メモリは良いオプションです。コールバックはデータをどこかに置き、描画スレッドをトリガーして、データが終了するのを待つことができます。(これは、描画関数自体を呼び出すコールバックからわずか1ステップです。)

私はメッセージパッシングを好むかもしれませんが。データが受信されると、コールバックはデータをパックして描画スレッドに送信(コピー)し、描画スレッドは受信時にデータを描画できます。これには、UARTコードが描画コードを待たないという追加の利点がありますが、OpenGLの速度を考えると、特にシリアル通信と比較して、これが問題になる可能性は低いです。

于 2012-01-02T09:38:52.103 に答える