0

http://developer.gnome.org/gdk/unstable/gdk-Threads.htmlから

Win32バックエンドでは、GDK呼び出しを複数のスレッドから試行しないでください。

しかし、インターフェイスのフリーズを回避するにはどうすればよいですか?

たとえば、ホストから仮想マシン名を取得し、それを行ごとにツリーリストビューに追加するボタンのコールバックがあります。それを実行して行を追加するpthreadを作成します。

すべてのアプリケーションが同じように動作した後(すべてのダイアログなど)、リストビューがガベージされる(一部のセルが空白になる)ことがありまし

WIN32のマルチスレッドは不可能ですが、それをシミュレートしたり、そのような問題を回避したりするにはどうすればよいですか?

4

2 に答える 2

1

この質問に答えるためだけに:

But how to avoid freezing of an interface?

UIに使用しているツールキットとは別に、これはUIとは異なるスレッドで計算を行うことによって実現されます。次に、メッセージを使用してUIを更新し、データの変更を反映します。ウィンドウを作成したスレッドとは異なるスレッドからUIを更新しないでください。

于 2013-01-11T16:51:52.030 に答える
1

最も簡単な方法は、実行中にスレッドを実行し、そこからGUIに渡したいものをグローバルコンテナに追加することです。次に、を呼び出しg_idle_add()て、このコンテナーを読み取り、GUIを更新する関数をスケジュールします。アイドルコールバックはGUIスレッドから呼び出されます。

注意すべき2つのこと:

  1. g_thread_init()プログラムの初期化でまたはを呼び出しgdk_thread_init()て、glibをスレッドセーフにします。
  2. ミューテックスでグローバルコンテナを保護します。
于 2013-01-11T16:52:19.327 に答える