問題タブ [event-wait-handle]
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.
performance - EventWaitHandleが待機しているかどうかを検出する方法は?
アクセスを同期するために多くの場所でEventWaitHandleを使用する、かなり優れたマルチスレッドのwinformsアプリがあります。
だから私はこれに似たコードを持っています:
次に.RevTypes
、UIからsomewehreを呼び出すだけで、LoadStuff
実行が終了するとデータが返されます。
これはすべて完全に正しく機能しますが、これRevTypes
は1つのプロパティにすぎません。実際には、これらは数十個あります。そして、これらのプロパティの1つまたはいくつかは、UIが高速に読み込まれないようにしています。
各プロパティにベンチマークコードを配置する以外に、UIの読み込みを保持しているプロパティを確認する方法はありますか?EventWaitHandleが実際に待機するように強制されているかどうかを確認する方法はありますか?
c# - ajax リクエストのロングポーリングの C# サーバー側部分をどのように実装すればよいですか?
更新のために 3 秒ごとに ajax を介してポーリングするブラウザーを含むアーキテクチャがあり、それをlong-pollingに変更したいと思います。
1, 2.. {n} 個のクライアントがロング ポーリングを行い、更新を待機し、待機しているクライアントに戻るように通知するためにサーバーで何かが発生するようにしたいと考えています。最初に考えたのは を使用することでしたEventWaitHandle
。1 つのクライアントをサポートするだけであれば、これは簡単に実行できます。クライアントをブロックするだけで、おそらくタイムアウトで、そうではないかもしれません。いずれにせよ、サポートできるのは 1 つのクライアントのみであり (待機中のスレッドは 1 つしか起動しないため)、n 個のクライアントが必要です。AutoResetEvent
WaitHandle
WaitOne
AutoResetEvent
を使用する必要があると確信していますが、それをいつ呼び出すかはわかりません(スレッドを起動するとき)。と の間の任意の量だけを使用する必要がありますか?ManualResetEvent
WaitHandle
Reset
Set
Thread.Sleep
Set
Reset
疑似コードでは、ウェイク ロジックは次のようになります。
- 得る
ManualResetEventWaitHandle
- 電話
Set
- 新しいリクエストが吹き飛ばされるのを防ぎながら、待機中のすべてのクライアントが目覚めたことを確認します
Reset
待機中のすべてのクライアントが更新を受信したので、今すぐ呼び出します
私が苦労しているのはその3行目です。現在LastTxID
、クライアント/サーバーが維持し、潜在的に2つの待機ハンドルを使用するという考えを投げかけています。ただし、この実装に夢中になる前に、ここでフィードバックを取得して、ウェイク ロジックがどのように実装されるかを確認したかったのです。
編集:IISを微調整するか、WCFまたはその他のソリューションを介してホスティングすることにより、最大同時ユーザー数を把握することに関連する問題があると仮定します。ウェイクアップ ロジックだけに注目したいと思います。
c# - EventWaitHandle クラスの使用
in Process AI は、プロセス B からイベントを受け取る必要があります。私は EventWaitHandle を使用することにしました。両方のプロセスで、次のコードを記述します。
次に、プロセス A で Set() メソッドを呼び出します。
プロセス B で "MyGUID1221" イベントを受け取り、いくつかのアクションを実行するにはどうすればよいですか? 「MyGUID1221」リスナーの作り方は?
ありがとう。
c# - AutoResetEventセットがタイムアウト後に呼び出されました
MSDNから「待機中のスレッドがない場合、スレッドが待機を試みるまで、またはそのReset
メソッドが呼び出されるまで、待機ハンドルは通知されたままになります。」
スレッド#1:
スレッド#2:
私のアプリケーションでは、スレッド#1が外部アプリにリクエストを送信し、シグナルまたはタイムアウトを待機しています。外部アプリから応答を受信した場合、スレッド#2は待機ハンドルを設定します。これset
は、タイムアウト後でも呼び出すことができます。私の質問は
1)Method2
タイムアウト後に呼び出して、信号を設定できる可能性が高いです。それは、将来スレッド#1へのリクエストがあるときはいつでも、WaitOne(10000)
効果がなく、すぐにリリースされることを意味しますか?
2)タイムアウトの場合に電話をかけないようset
にする方法はありますか?Method2
それはスレッド#1に問題を引き起こしますか?
c# - System.Threading.EventWaitHandleを例外をスローせずに開くことができるかどうかを確認することは可能ですか?
私は持っています
例外をスロー/処理せずにそれを行う方法はありますか?
c# - EventWaitHandleを使用して、複数のユーザーにまたがる単一のインスタンスを確保する
共同編集者は、SparkfunRFIDリーダーに接続するProcessingを使用してプロトタイプを作成しました。USB経由のシリアル接続を使用していると思います。私たちはプロトタイプを多くのトライアリストの家に配備しましたが、私が愚かに見落としていた一般的な使用シナリオの1つは、ユーザーの切り替えでした。したがって、プロトタイプアプリケーションの1つのインスタンスのみがマシン上のすべてのユーザーで実行されるようにするラッパーを作成しています。
シンプルなコンソールアプリとして、これを最初に試しています。コードは次のとおりです。
(注:このコードには、(1)実行中のプロトタイプではないJavaプロセスを強制終了すること、および(2)同時に開始する多数のインスタンスに応答するコードがないこと(一度に2つだけ)に問題があることを知っています。しかし、それは私のものではありません。質問についてです。)
単一のユーザーアカウントでこれをテストすると、正常に機能します。アプリを起動すると、プロトタイプが起動します。アプリの2番目のインスタンスを起動すると、最初のインスタンスがプロトタイプの最初のインスタンスを強制終了してから、2番目のインスタンスがプロトタイプの別のインスタンスを新たに起動します。
しかし、2つの異なるユーザーアカウントからこれを実行しようとすると、失敗します(サイレントに)。もし私が
- アプリケーションのインスタンスを開始すると、プロトタイプが開始されます
- ユーザーの切り替え
- アプリケーションのインスタンスを起動すると、最初に既存のインスタンスをシャットダウンする手順1から、アプリなしでプロトタイプが起動します。
誰かが私のコードの何が問題になっているのかわかりますか?同じマシン上の複数の同時ユーザーセッションでEventWaitHandleをどのように使用する必要がありますか?
c# - スレッドがWaitOne()を待機している間にアプリを停止する適切な方法
遊んでいてAutoResetEvent
、アプリが終了していません。理由はわかっていると思います。スレッドはまだ実行されているため、アプリは終了しません。通常、ではMain()
、キーを押すとアプリが終了します。ただし、コンソールウィンドウは閉じなくなりました。私はシンプルなコンソールアプリを持っています:
このアプリを終了する正しい方法は何ですか?各スレッドへの参照を保持し、各スレッドを呼び出す必要がありますAbort()
か?waitHandle
それを待っているスレッドが終了するように信号を送る方法はありますか?(私はそうは思いませんが、尋ねる価値があると思いました。)
java - Java でのプロセス管理と EventWaiter
Java で小さなデーモン アプリケーションを実装します。以下は私の要件です。誰かがそれを行う方法について何か提案をしてもらえますか?
- 別のプロセスを開始して監視するには (クラッシュした場合は再起動します)
- Windows と Linux の両方で実行 (SUSE が推奨)
- また、デーモン アプリ自体が終了することはありません。OS シャットダウン シグナルを受信すると、正常に終了するはずです。
Windows の場合、いくつかの Win32 API を呼び出して Process を開始し、その状態を監視できます。デーモン アプリは、ライフサイクルが Windows によって自動的に管理される Windows サービスである可能性があります。
問題は、Linuxに対してそれを行う方法です。さらに、2 つではなく両方の OS を処理する 1 つのコード セットを作成するにはどうすればよいでしょうか。
.net - 複数のプロセスと待機ハンドル
この質問に基づいて、Jim Mischel の推奨に基づいてソリューションに waithandles/eventwaithandle を使用することにしました。私は「ほぼ」それを機能させています。ここにコードがあります
繰り返しますが、これはほとんどすべてのアプリケーションが継承する基本フォームからのものです。単一のアプリを使用している場合、完全に機能します。ベース フォームから継承する複数のアプリを実行していて、誰かがメッセージ ボックスの 1 つだけをクリックすると、別のアプリに 2 つ目のメッセージ ボックスが表示されることがあります。私はもともと waithandle を static/shared として宣言していて、それが問題だと思っていましたが、そうではありませんでした。また、各アプリに独自の待機ハンドルを作成させ、それをベースに渡そうとしましたが、同じ結果になりました。待機ハンドルが異なるアプリケーション間で共有されているように見える理由を知っている人はいますか? ところで、waitHandle は実際には ManualResetEvent です
c# - スレッドとイベントの同期
私のコンソール アプリケーションでは、スレッド内でのイベントの同期が困難になります。
アプリケーションは、いくつかの乱数の後にスレッド ブロックが続き、EventWaithandleデータ スレッドが終了した後、コンソールに出力されて結果を返します。
目的は、次のような方法でデータを印刷することです
*ランダムデータ
スレッドブロック
ランダムデータ
スレッドブロック
....
スレッドの終了
...*
サンプル出力
1234
スレッド 2 ブロック
2345
スレッド 0 ブロック
3456
スレッド 1 ブロック
....
スレッド 1 の終了
スレッド 4 終了
....
その方法でスレッドとスレッド内のイベントを同期する方法。