3

エントリの長いリスト(約1500)をロードして表示する必要がある古いMotifアプリケーションを扱っています。xmFormWidgetClassviaのインスタンスを作成および管理してXtVaCreateManagedWidget()から、一連の線形階層を詰め込みますxmFrameWidgetClass->xmFormWidgetClass->xmFormWidgetClass->xmPushButtonWidgetClass。それぞれPushButtonに複数行のラベルが含まれています。これが読み込まれると、多くのCPUが必要になり、X/Motifライブラリ内でいくつかのジオメトリ計算を実行します。新しいボタンが追加されるペースは、非常に急速に低下します。の内部で使用されているO(N)アルゴリズムがあるようですXtVaCreateManagedWidget()

XtUnrealizeWidget()の元のインスタンスで実行すると、状況ははるかに良くなりますxmFormWidgetClass。エントリはほぼ一定の速度で追加されていますが、作成したもの全体を表示する方法が見つかりません。XtRealizeWidget()の元のインスタンスはxmFormWidgetClassウィンドウにレンダリングされません。

私は何が間違っているのですか?階層にデータを入力してからジオメトリを計算し、それを一度に画面にレンダリングする方法はありますか?

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

私をMotifライブラリ内に留めておくためのアドバイスは大歓迎です!

よろしく、/ Sergey

4

2 に答える 2

1

XtManageChild後に電話してみてくださいXtRealizeWidget

于 2011-07-19T06:53:33.513 に答える
1

管理されていないすべてのウィジェットを作成してWidgetListに配置してから、XtManageChildren()を呼び出してください。次のリファレンスを参照してください

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

個々のウィジェットが管理されるたびに、親のchanged_managedプロシージャが呼び出されます。XtManageChildrenは、changed_manageプロシージャを1回だけ呼び出します。これは役立つかもしれません。

于 2011-07-31T05:47:16.303 に答える