問題タブ [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.
c# - C# で autoresetevent を使用してファイルを読み書きする
スレッド同期の簡単なプログラムを作成しました。しかし、このプログラムを実行すると、「別のプロセスで使用されているため、プロセスはファイル 'D:\Vivek.txt' にアクセスできません。」というエラーが表示されます。このエラーが発生する理由。
のコードを置き換えると
に
プログラムは初めて同じエラーを表示します。その後、エラーが発生することはありません。バグの領域、理由、および最善の解決策を教えてください。
c# - EventWaitHandle を使用して、名前付きイベントを待機している Windows サービスに関する問題。
私は現在、c# と .net Framework 4.5 を使用して Windows サービスを開発し、既存の独自アプリケーションの機能を拡張しています。このサービスは、メイン アプリケーションから通知される名前付きイベントを待機する EventWaitHandleClass ( msdn link ) でブロックします。このようなもの:
*: EventWaitHandleSecurity MSDN
プログラムをコンソールアプリケーションとして実行すると、これは魅力のように機能します。メインアプリケーションからイベントを簡単にキャッチして、意図したとおりに処理できますが、アプリケーションをサービスとしてインストールすると、同じ名前のイベントを待ってロックされますしかし、信号を受信することはありません。サービスは NT AUTHORITY\LOCALSERVICE アカウントを使用して実行するように設定されています。自分のアカウント (コンソール アプリケーションとして実行中にプログラムが使用するアカウント) を使用してみましたが、何も起こりません。
シグナルを発信するアプリケーションが自分のアカウントで実行されているのに役立つ場合。私はWindows用のデスクトップアプリケーションを開発する完全な初心者なので、助けていただければ幸いです。
c# - EventWaitHandle も時々!スレッドをスキップ
VS 2012、.Net 4.5 を使用しています。
このコードを実行します (スレッドに関する記事からいくつかのサンプルをアップグレードするだけです)。
私はそれを数回デバッグしますが、通常 (常にではありません) 間違った結果が得られます。最初に(1回以上)修正します:
しかし、その後、1 つのスレッドをスキップし始めます (最初の場合もあれば、2 番目の場合もあります)。
そして、プログラムは反応しません。数分で正しい結果が得られますが、再び間違った結果が得られます...
さらに、段階的にデバッグすると、常に正しく動作します。
だから、多分私は別のアプローチを選ぶべきですか?しかし、スレッドがランダムな順序でシグナルを受け取ったとしても、これは私が期待したように見えます...
c# - EventWaitHandel が使用されている場合、別のスレッドから読み取られたときに、あるスレッドから割り当てられた変数は「スレッドセーフ」ですか?
あるスレッドで変数を作成した場合、別ManualResetEvent
のWaitOne()
スレッドが同じ変数に値を割り当ててEventWaitHandel
. 最初のスレッドで変数を読み取るようになると、他のスレッドによって割り当てられたばかりの値を常に取得することが保証されますか?
(私が知る限り、メモリバリアを使用していないため、最適化のために CPU キャッシュから値を取得できなかったのではないかと心配しています)。
例えば
c# - ManualResetEvent(EventWaitHandle) Set は WaitOne(timeout) よりも多くの CPU を消費します
ManualResetEvent を実装しているときに、何か驚いたことがあります。
mre.Set()
コマンド信号を理解し、他のプロセスを実行できる限り。
mre.WaitOne();
現在の行を保持し、シグナルを待ちます。これに加えて、タイムアウトで使用する場合mre.WaitOne(100ms);
しかし!StartCommunicateがスレッドの仕事であるとしましょう。
waitHandle.Set();
私のプロセスが ~%25を使用する場合、または別のプロジェクトでは ~%1 の CPU リソースを使用します。
しかし、私が使用する場合 waitHandle.WaitOne(100);
(タイムアウト値はシンボリックです。100ms の信号を (試行) 待ちます)。
プロセスは、 waitone(timeout)で ~%0 の CPU リソースを使用して開始し ます。これはどういう意味ですか? 私にとってThereIsAJobToExecuteはSocket.HasDataです。では、 SerialPort.BytesToReadまたはSocket.Availableに多くヒットすると、CPU 使用率が高くなるということですか?
ヒットごとに 100 ミリ秒スレッドを保持することは、副作用がありますか? ソケットプログラムまたはrs232接続のボーレートが比較的新しい世代のPCと比較して非常に低いと仮定します。
したがって、使用するmre.WaitOne(1);
方が私には好ましいようです。あなたはそれについてどう思いますか ?いくつかのメモリおよびパフォーマンス プロファイラーを使用していくつかの実験を行っていますが、さまざまな種類のクライアント マシンに対して最適なソリューションを実行しているかどうかはわかりません...
コメントお待ちしております。
前もって感謝します!
編集:ソケットプログラミングの場合、動作ASYN
するように利用できるため、以下のコードで簡単に実行でき、ポーリングは必要ありません。
しかし、RS232 COMM ポートのプログラミングが必要です。か否か ?
.net - EventWaitHandle - 複数のスレッド = 一貫性のない動作
コマンドを送信して応答を受信できるデバイスとの通信をセットアップしようとしています。ただし、無期限の待機時間を防ぐために、タイムアウト フラグを確実に制御したいと考えています。
私はこのようなことをしました:
私の質問は、Send メソッドと次のシナリオにアクセスできる複数のスレッド (この例では 2 つとしましょう) があるかどうかです。
スレッド A:
スレッド B:
一貫性のない結果が得られます。つまり、理解できる 2 番目のコマンド (キャンセル) の応答を受け取ったときに両方のスレッドが続行することがありますが、最初のスレッドが 30000 ミリ秒のタイムアウトに達することがあります。これは説明できません。
私が見逃していることや間違っていることについて何かアドバイスはありますか?
c# - EventWaitHandle を使用して、通知付きの単一インスタンス アプリケーションを保証する
EventWaitHandle を使用して単一インスタンス アプリケーションを保証する次のサンプルで、EventWaitHandleSecurity を設定する正しい方法はどれですか?
特に、全員にすべてのアクセスをやみくもに許可するのは好きではありません。しかし、デフォルトのセキュリティ設定が何であり、その場合に設定される最小の特権が何であるかを理解できませんか?
ありがとうございました。
c# - EventWaitHandle による同期が期待どおりに機能しない
基本的にこれは私がテストしてきたコードです
したがって、基本的には 2015 がコンソール ウィンドウに書き込まれると予想されますが、そうではなく、15 だけが出力されます。WaitOne
結果が返されてインクリメントされるまでGetNumber
実行が停止されるため、正常に動作していますが、その後何が起こるかわかりません。コードをデバッグして段階的に進めれば問題ありませんが、コードを実行すると 15 が出力されます。タスクではなくスレッド プールを使用する理由を聞かないでください。これはテスト目的のためだけです。
c# - EventWaitHandle の名前について混乱する
以下の MyServer 側のコード スニペットを検討する
MSDN から検索した後、ctor の 3 番目のパラメーターは次のことを意味します。
名前
タイプ: System.String
システム全体の同期イベントの名前。
しかし、CreateEventメソッドを例外なく複数回呼び出すことができることがわかりました。これは、複数の EventWaitHandle インスタンスが同じ名前で存在するということですか? これは正しい動作ですか?
以下は MyClient 側のコード スニペットです。
CreateEventが MyServer 側で 2 回呼び出された場合、OpenEventが呼び出された後に MyClient 側でどのイベントが開かれますか?
c# - イベント待機ハンドルを使用してウィンドウが閉じられるのをブロックし、async-await としてラップします。許容できる?
ビューによって呼び出される CloseWindow メソッドを使用して、ウィンドウ表示サービスがあります。呼び出しコードでブロッキング メソッドを作成したいと考えています。したがって、ウィンドウがポップアップしている間はブロックし、ウィンドウから出力が返されるようにすることができます。
この手動リセットの使用は許容されますか? それまたは TPL との混合方法に技術的または設計上の問題はありますか?
そのサービスはこちら
ここにそれを呼び出すコードがあります。