2011-07-15 4 views
2

私は古いMotifアプリケーションを扱っています。これは、長いリストのエントリ(約1500)を読み込んで表示する必要があります。 XtVaCreateManagedWidget()を介してxmFormWidgetClassのインスタンスを作成して管理し、一連の線形階層xmFrameWidgetClass-> xmFormWidgetClass-> xmFormWidgetClass-> xmPushButtonWidgetClassを使用してデータを埋め込みます。各プッシュボタンには複数行ラベルが含まれています。これがポピュレートされると、多くのCPUが必要になります。これは、X/Motifライブラリの内部で幾何学計算を実行するのに費やします。新しいボタンが追加されるペースは、非常に迅速に低下します。 XtVaCreateManagedWidget()内でO(N)アルゴリズムが使用されているようです。Motifでボタンウィジェットの長いスクロールリストを作成する正しい方法は何ですか?

xmFormWidgetClassの元のインスタンスでXtUnrealizeWidget()を実行すると、はるかに良くなります。エントリーはほぼ一定のスピードで追加されていますが、私が構築したすべてのものを表示する方法は見つけられません。 xmFormWidgetClassの元のインスタンスのXtRealizeWidget()はウィンドウ内でそれをレンダリングしません。

私は間違っていますか?階層を作成し、ジオメトリを計算して一度に画面にレンダリングする方法はありますか?

アプリケーションの再設計はオプションですが、オプションの最後の手段です。

Motifライブラリの中に私を留めてくれるアドバイスは高く評価されます!

よろしく、 /セルゲイ

答えて

1

XtRealizeWidgetXtManageChildを呼び出してみてください。

+0

ありがとうございました!しかし、私が前に気づいていない親ウィジェットでこれを行うと、まだ画面上にレンダリングされません... – evolvah

1

すべてのウィジェットを管理しないで作成し、WidgetListに配置してからXtManageChildren()を呼び出してみてください。以下参照

http://www.s-and-b.su/syshlp/motif_guide/MotifProgGuide/Making_Widgets_Visible.html

に、個々のウィジェットが親changed_managed手続きが呼び出され管理されているすべての時間を確認してください。 XtManageChildrenはchanged_manageプロシージャを1回だけ呼び出します。これは役に立ちます。

関連する問題