問題タブ [autoresetevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Visual Studio 2010 で単体テストを実行中に AutoResetEvent が時期尚早に通知される
マルチスレッド アプリケーションをテストするために、VS2010 で MS 単体テストを実行しています。
アプリケーションは を使用しAutoResetEvent
てスレッドを同期します。これは次のように宣言されます。
メイン テスト スレッド (ID: 13)
メインのテスト スレッドは、スレッドを起動してキャプチャ ファイルを解析し、次に を呼び出しWaitOne()
てAutoResetEvent
、キャプチャが完了するまでブロックします。
(補足:コードにはもともとcaptureParsedEvent.Reset()
afterへの呼び出しがありましたWaitOne()
が、この問題を調査しているときにこれを削除しました。私の調査では、これはAutoResetEvent
オブジェクトには必要ない可能性があると結論付けられたためです。)
解析スレッド (ID: 18)
一方、解析を行っているスレッドは次のAutoResetEvent
ように通知します。
通常、すべてが正常に動作し、出力ウィンドウに次の予想される出力が表示されます。
ただし、次の出力が断続的に表示されます。
キャプチャが実際に解析を終了していないため、これは明らかに問題を引き起こしています。
上記の場所は の唯一の発生であるcaptureParsedEvent.Set();
ため、他の誰もイベントを通知していないことがわかります.
いくつかの質問:
Trace.WriteLine()
スレッドセーフで、正しい順序でトレースを出力していますか?この問題は、VS2010 で単体テストを実行しているときにしか見たことがありません。テストが並行して実行され、このシナリオで問題が発生している可能性があるスレッドの使用で何かおかしいことがありますか? 私の理解では、テストは連続して実行されますが、これが正しいかどうかはわかりません。
c# - AutoresetEventとシングルトンの問題
次のコードの何が問題になっているのか教えてもらえますか?理想的には、最初にスレッドを開始してから、設定されたイベントを待つ必要があります。その代わりに、スレッドを開始せず、WaitOne()でスタックします。
スレッドに何が起こったのか、そしてその理由を知りたいのですが。
編集: これまでのところ、@BrokenGlassによって提供された説明は理にかなっています。ただし、コードを次のコードに変更すると、別のスレッドがコンストラクターを完了せずにインスタンスメソッドにアクセスできるようになります(@NicoSchertlerによる提案)。
c# - AutoResetEvent により、マルチスレッド UCMA 3.0 アプリケーションでデッドロックが発生する
私のParallel.Foreachループで私は呼んでいます
_helper は、UserEndPoint および購読などの他のすべての操作のカプセル化クラスです。
Subscribe メソッドは次のとおりです。
_contactSubscribeCompleted.WaitOne(); の待機中にスレッドがデッドロックする このデッドロック競合を回避する方法は何ですか?
乾杯、
PS: デッドロックが発生する可能性のある理由の 1 つは、AutoResetEvent に固有の問題があるためです -- ドキュメントから -- 「Set メソッドへのすべての呼び出しがスレッドを解放するという保証はありません。2 つの呼び出しが近すぎる場合、スレッドが解放される前に 2 番目の呼び出しが発生するようにすると、1 つのスレッドのみが解放されます。2 番目の呼び出しが発生しなかったかのようになります。また、待機しているスレッドがなく、AutoResetEvent が既に通知されているときに Set が呼び出されると、 call has no effect. " これに対する回避策はありますか??
c# - c#で待機ハンドルをシミュレートしていますか?
と を使用Wait
して、次のようPulse
に a をシミュレートできます。ManualResetEvent
コード#1
大丈夫
次に、それを次のように強化することについて話しましょうAutoREsetEvent
。
のAutoResetEvent
コードを次のように置き換えるだけですWaitOne
。
コード#2
メソッド内で次のPulseAll
ように置き換えます。Pulse
Set
コード#3
ここで質問です。コード #2 の行_signal = false;
。
なぜ必要なのですか?1 つの待機ハンドルPulse
にのみ到達し、ブロックされたアイテムを 1 つだけ通過させ、ゲートを自動的に閉じることを知っています。AutoREsetEvent
では、なぜ書く_signal = false
必要があるのですか?.
.net - AutoResetEvent の状態を確認する
オブジェクトが実際にどのようにAutoResetEvent
扱われたかを確認することはできますか? タイムアウトまたは別のメソッドから Set() を呼び出すことによって起動されますか?
これが私のコードです。
c# - スレッドを停止するための AutoResetEvent とブール値
ワーカー スレッドにオブジェクトがあり、実行を停止するように指示できます。bool または AutoResetEvent を使用してこれを実装できます。
ブール値:
自動リセットイベント:
Stop()
メソッドは false に設定される_isRunning
か、 を呼び出します_stop.Set()
。
それとは別に、AutoResetEvent を使用したソリューションは少し速く停止する可能性がありますが、これらの方法に違いはありますか? 一方が他方よりも「優れている」か?
c# - 同じイベントを待っている複数のクライアント
多くの一般的なクライアントが独自のシステムと通信するために使用する通信 API を開発しています。
このプロプライエタリ システムは API を公開し、特定のクラスを使用してこのシステムからメッセージを送信および待機します。明らかに、システムはイベントを使用してメッセージの準備ができていることを警告します。イベントの名前は OnMessageArrived です。
私の考えは、単純な SendSyncMessage(message) メソッドを公開して、ユーザー/クライアントが単純にメッセージを送信し、メソッドが応答を返すのを助けることです。
クライアント:
communicator クラスは次のように行われます。
私は本当に waithandle を使用することに慣れていませんが、メッセージを送信してイベントを待機するインスタンスを作成することを考えていました。イベントが到着するとすぐに、メッセージが期待どおりのものであるかどうかを確認し (一意の GUID を確認します)、そうでない場合は次のイベントを待ち続けます。これは、多くのクライアントが同時に作業している可能性があり (通常はこのようになっています)、それらが並行して動作するようにしたいからです。私が自分のものを実装したとき、現時点でクライアント1、クライアント2、およびクライアント3を実行すると、クライアント1が終了するとすぐにクライアント2がメッセージの送信を開始し、クライアント2が終了するとクライアント3が送信されます:私がしようとしているものではありません行う。
コードを修正してターゲットを取得するのを手伝ってもらえますか?
ありがとう!
c# - スレッドがWaitOne()を待機している間にアプリを停止する適切な方法
遊んでいてAutoResetEvent
、アプリが終了していません。理由はわかっていると思います。スレッドはまだ実行されているため、アプリは終了しません。通常、ではMain()
、キーを押すとアプリが終了します。ただし、コンソールウィンドウは閉じなくなりました。私はシンプルなコンソールアプリを持っています:
このアプリを終了する正しい方法は何ですか?各スレッドへの参照を保持し、各スレッドを呼び出す必要がありますAbort()
か?waitHandle
それを待っているスレッドが終了するように信号を送る方法はありますか?(私はそうは思いませんが、尋ねる価値があると思いました。)
c# - AutoResetEvent が何らかの理由で機能しない
upd AutoResetEvent が期待どおりに機能することがわかりました。内部のどこかに例外があるようですCalculateAndNotify
。したがって、この質問は AutoResetEvent に関するものではありません。しかし、HFT ソフトウェアでインデックスをより適切に計算する方法を提案できる場合は、コメントを歓迎します。
================================================== ============================ クラスの完全なリストの下に追加します。2 つの重要な方法があります。が呼び出されるCalculate
たびにインデックス値を再計算しています。InstrumentUpdated
いくつかのトレースを追加したところ、次のことに気付きました: 1 つのスレッドが でハングしare.WaitOne()
ます。別のスレッドが何度も呼び出しているにもかかわらずare.Set()
、最初のスレッドは解放されません。なんで?コードの何が問題になっていますか?
javascript - ノード順序のリセットと event.srcElement の非表示
カスタムの会社階層を構築しており、会社チャートで Div のランクを「昇格」できるようにする必要があります。各 div 内のスパンとしてトリガーをネストしています。クリック イベントは、親 div を見つけて前の div と交換するように設定されています。問題は次のとおりです。
この後、ドキュメント内のノードの順序を「リセット」して、その後のスワップがロード時に存在した順序ではなく、新しい順序から外れるようにする必要があります。
スワップアップした div がグループ内のどこにあるかを調べる必要があります。シリーズの最初の場合は、アップ ボタンを含むスパンを非表示にします。このロジックで何かを想像します:
構文が間違っていることはわかっていますが、js は初めてなので、正しい方向に向けてください。
これは私が現在使用しているコードです。現状では、3 つの要素の順序を 1,2,3 から 2,1,3 にスワップすると、3 のスワップをクリックすると、それより前の 1 に切り替わりますが、2 にスワップされます。ページロード時に先行する要素。