2009-03-26 25 views
1

この「競合状態」によってユーザーが混乱しないようにするには、どのような方法が最適ですか?GUIの同時実行

これは本当にばかげた質問かもしれません。

1つのGUIと、そのウィンドウ内のオブジェクトのマウス操作をサポートするウィンドウ。 例:ユーザーはA→Bのオブジェクトを移動したり押したりすることができます。(これはいくつかのサーバーに影響を与えますので、大量の簡単な操作です) 別のユーザーが既に何かを行ったそのオブジェクトでサーバーは競合やマージなどを処理します。 しかし、元のユーザーには、「同じ時刻に」発生する可能性のある何らかのフィードバックが必要です。 (つまり、ユーザーが1つのスレッドでオブジェクトを移動し、別のスレッドでアプリケーションrecv通知を受け取る)

これは、recvスレッドがバックエンドストレージとGUIのようなものであると主張できてもマウスを押してドラッグすると「ロック」になる可能性があります。

あなたはB上にオブジェクトをドロップすると思うが、実際にはB '、B' '、C、D(または消えている)に現れる。

私はMessageBoxesがまったく好きではないし、マイナーなことごとにポップすることさえできない。 いいえ、ユーザーがドラッグを開始したときに、オブジェクトをユーザーにロックすることはできません(代わりにメッセージを受け取ります)。

ユーザーがBのオブジェクトの土地を表示し、 B '、B "、CまたはD(または蒸発)に移動、アニメートする。

答えて

1

私は、同時性が発生したときにGUIにロック(またはモーダルメッセージを表示)したくないと思います。私は、なぜそれが起こっているのかわからないとき、ユーザーにとって本当にイライラすることができると思います。

私は、(並行性がなかったように)GUIを応答しておき、他のスレッドからの応答を受け取ったときに競合が検出されたときにUIを修正すると思います。私はアニメーション/エバポレーションエフェクトが好きです。ユーザーに操作が上書きされたことを知らせるために、おそらく復帰したGUIを説明するためのステータスバー(または邪魔にならない通知)メッセージが表示されます。

操作が開始されたときにメッセージを追加することができれば、別のユーザーとの競合の可能性がある、いくつかの追加のフィードバックを(邪魔にならないように)追加できます。

1

この場合、何が起こっているかをユーザーに伝える警告メッセージが唯一の適切な操作方法だと思います。あなたはあなたが望むすべてのGUIをあなたが望むものにすることができます。Bをアニメーション化して別の場所に移動する(または消滅させる)が、あなたはさらにユーザーを混乱させるでしょう。"WTF私はそこに移動したくありませんでした!

編集:私はアニメーションのアイデアを気に入っていること追加する必要があり、それは私はそれが自分自身で十分であるとは思わないということ以上でした。

0

大きな問題は、なぜそのような行動が許可されるのでしょうか?複数のユーザーが(人間規模の知覚で)かなりの時間を伴う何かを行うことができれば、リアルタイムで複数のユーザー間の相互作用を正確に描写するために事態を大幅に複雑にするでしょう。

状況にアプローチするより良い方法は、ユーザーが1つ以上の排他的使用を主張するまで、オブジェクトを読み取り専用(したがって同時実行性の問題なし)で扱うことです。その時点で排他ロックは成功するか(その時点でユーザーは必要な変更を行うことができます)、失敗した場合(たとえば、ステータスバーに「Objects A、B、D、G」というフィードバックが表示されます他のユーザーが排他的に使用するために予約されています)。