0

レガシー XWindows アプリケーションの開発中に興味深い問題に遭遇しました。

説明しない理由により、コマンドライン ユーティリティから GUI アプリに ClientMessage を送信しています。メッセージの目的は、いくつかのサイド パイプを介して同期通信プロセスをトリガーすることであるため、ほとんどのメッセージは同じ内容になります。 . ときどき 2 つのメッセージを送信することに気付きましたが、配信されるのは 1 つだけです。私はこれを、両方のメッセージが同じ内容で、同じ秒で送信されたという事実にたどり着きました (IOW、送信時のログ タイムスタンプは同じ番号でした)。メッセージにダミーのコンテンツを追加してすべてを異なるものにするとすぐに、問題はなくなりました。

これは、vncserver と Exceed という 2 つの異なる X サーバーで発生しました。私が認識していない XWindows 機能 (メッセージのスロットリング/圧縮など) を実行しているのでしょうか? 誰もこのようなことに遭遇しましたか?

4

1 に答える 1

0

Xサーバーは、私が知っているクライアントメッセージを圧縮するべきではありませんが、おそらく一部のXツールキット(Motif、Xawなど)はそれらを圧縮します。これが私が最初に探すことです。おそらく、メッセージを受信するGUIアプリは、アプリケーションコードがメッセージを認識する前に、ツールキット内のどこかで圧縮されています。

繰り返しになりますが、vncserverとexceedはどちらも、おそらく他のXサーバーよりもリモートでの使用に重点を置いており、おそらく、不適切な圧縮ハックが含まれている可能性があります。私は多くのX仕様を読み、多くのXコードを記述しましたが、この動作については聞いたことがありません。

思いがけないランダムな考えですが、コマンドラインアプリを終了する前に、コマンドラインアプリの最後にXFlush()またはXSync()があることを確認し、閉じる前にこれらのメッセージをソケットに書き出すようにしてください。しかし、これが問題である場合、メッセージの内容が重要になる理由はわかりません。

于 2008-09-16T00:43:56.593 に答える