0

Win32 アプリケーションを C の GTK+ アプリケーションに移植しています。

UI は別の (UI 以外の) ライブラリにコールバックを登録します。ライブラリは、ユーザーからの追加情報が必要な場合にコールバックを呼び出します。UI はユーザー入力を要求し、ユーザーが要求された情報を入力すると、別のライブラリ 'setinfo' 呼び出しを呼び出します。UI は、ユーザー入力を待機しているライブラリのコールバックをブロックできません。

Windows では、これはカスタム メッセージをメイン ウィンドウに投稿し、すぐに戻るコールバックによって処理されました。メイン ウィンドウには、ユーザー入力を収集するためのダイアログが表示され、適用時に「setinfo」を介してこの情報がプッシュされます。

GTK でこれを達成するための同等または推奨のメカニズムは何ですか? つまり、ダイアログが GTK のメイン スレッドを使い果たし、すぐにコールバック スレッドに戻るような、ある種のカスタム メッセージまたはイベントを投稿するにはどうすればよいでしょうか?

4

2 に答える 2

0

これで、UIと外部ライブラリLができました。適切な解決策は次のようになります。

  1. LがUIを呼び出している最初のコールバックでは、GtkDialogをポップアップします。
  2. を呼び出さないgtk_dialog_run()でください。これにより、ダイアログはモーダルになりますが、Lはブロックされます。
  3. ダイアログが応答信号を生成したら、それを解析してにコールバックしL.setinfo()ます。
  4. ダイアログを閉じます。
于 2012-06-29T10:25:35.757 に答える
0

私にとってうまくいった解決策はg_idle_add()でした。

コールバック スレッドで:

g_idle_add(MyPromptFunction, someData);
return;

これでライブラリに戻ります。次に、メインの UI スレッドが MyPromptFunction を呼び出して、ダイアログを表示し、必要な情報を収集して、SetInfo() 経由でライブラリに再送信できた場所から呼び出します。

于 2013-06-14T23:00:35.410 に答える