7

UIの要素から常にUI要素を作成/更新する必要があるのはなぜですか?UI要素からUI要素を常に作成または更新する必要があるのはなぜですか?

すべてのプログラミング言語のUI要素は、UIスレッドからのみ安全にアクセス/変更できます。私はそれが標準の同時アクセスと同期の問題だと理解していますが、本当に必要ですか?この動作はプログラミング言語またはオペレーティングシステムによって課されますか?この状況が異なるプログラミング言語はありますか?

答えて

9

グラフィックスフレームワークは、オペレーティングシステムによって提供されることが多い(ただし必ずしもそうではない)ことが多いです。

基本的に、すべて「適切にスレッドセーフ」を行うことは非効率的です。呼び出しをUIスレッドにマーシャリングする必要があるのは確かですが、UIスレッド自体は、ロックなどを気にすることなく、非常に迅速にイベントを処理できます。

+0

フレームワークでは、危険を冒すのではなく、最初に安全でない方法で呼び出すようにするのではなく、呼び出しをマーシャリングする方が簡単でしょうか? .Netフレームワークは、少なくとも私たちのためにそれを行っていた可能性があります... – ak3nat0n

+0

私はいいえと言います。テキストボックスのTextプロパティを呼び出すと、今すぐかなり簡単に設定できます。フレームワークへの処理をプッシュすると、大部分の更新がUIスレッド自体から来ているにもかかわらず、*すべての*呼び出しはそのペナルティに拘束されます。 – jasonh

+0

@ザラダン:UIスレッドでコードを実行する必要があるかどうかを(自動的に)判断するのは簡単ではないかもしれないと思います。私は、UIスレッドで特定のコードを実行するために、言語のコンストラクタ(おそらく安全でないキーワードのようなもの)を優先します。ディスパッチャのコードを読むのが少し楽になります。 – Zyphrax

6

非常に高価です全体のUIスレッドセーフです。スレッドがUIを更新する必要がある(比較的まれな)機会に、プログラマに負担をかけるほうが良い。

5

UIフレームワークがそのように設計されているからです。理論的には本当にマルチスレッドのUIフレームワークを設計することは可能ですが、デッドロックを回避することは難しいです。

Graham Hamiltonは、主なJava UIフレームワークであるSwingを参照してこれについて素敵な記事を書いています。

関連する問題