問題タブ [manualresetevent]
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# - このコードは[理論的に]スレッドセーフではありませんか?
私が書いたコードで奇妙なデッドロックが発生しています。
アイデアは、Stopが同期である非同期操作を実装することです。呼び出し元は、完了するまで待機する必要があります。実際の作業が行われる部分を、単純なプロパティのインクリメント ( ++Value
、以下を参照) に簡略化しました。ただし、実際には、スレッドに非常に敏感な重い COM コンポーネントが呼び出されます。
私が経験しているデッドロックはStop()
、完了した操作を識別する手動リセット イベントを明示的に待機するメソッドにあります。
私が間違っていた可能性のあるアイデアはありますか?コードは自己完結型で、単独でコンパイルできる必要があります。
.net - シングルスレッドWindowsサービス(onStop)を適切に停止する方法は?
VS 2010 /.NET4.0で記述されたWindowsサービスがあります。
このサービスは、以下のコードスニペットのスキームに従っています。タイマーを使用して、数分ごとに目的の動作を実行します。数分ごとに実行される「望ましい動作」の要件は、現在、約10秒かかる作業に成長しています。
そのサービスには単一のスレッドしか必要ありません。複数のスレッドを作成する理由はありません。そのため、Windowsサービスをシングルスレッドと呼びました。
私が心配しているのは、誰かが管理コンソールを介してサービスを停止した場合、サービスが時折行っているその10秒間の作業の間にある可能性があるということです。
SOとサービスを停止する方法についていくつか読んだことがありますが、少し迷っています。WorkerThreadsが作成されることもあれば、ManualResetEventsが作成されることもありますが、これまで、Windowsサービスの最善の方法を完全に把握することはできませんでした。
10秒間の実行中に何らかのフラグを確認し、そのフラグが停止するように指示していない場合にのみ続行する必要があると考えています。そして、onStopメソッドでは、おそらく処理が適切に終了するまで待つ必要があります。
理論についてはこれだけです;)、しかし、以下のコードスニペットも考慮して、それからの私の最善の方法は何ですか?
皆さんありがとう!
c# - C#で問題を生成する静的変数(Windows 8)
私は使用済みのC#プログラマーではないので、これがばかげている場合は申し訳ありません:-)
Windows 8用のC#アプリを開発しています。Webリクエストを実行する必要があるため、リクエストデータを処理するためのコールバックがあります。
私は標準的なアプローチを使用しています:
実行中、allDone(do_something内)は初期化されません。allDoneをnullと比較するための条件を追加しましたが、そうです、nullです。
「DoneWaiting」メッセージはまったく印刷されません...
私は何が間違っているのですか?
ありがとうございました
c# - メソッドにイベント ハンドラーを埋め込むことの欠点
相互作用に非同期アプローチを持つアセンブリを使用する場合 (メソッドを呼び出して、応答と共にイベントが返される) は、メソッドにイベント ハンドラーを埋め込むことによって、アセンブリを同期メソッドに変換するのが好きな場合があります。
質問は; この種のコードはどこにも見当たらないので、このアプローチには、私が見逃して他の人が見ている重大な欠点があるのではないかと不快に感じています。では、このようなコードを書いても問題ないと思いますか?
接続イベントのイベント ハンドラーを埋め込む Logon メソッドの簡単な例。
また、このタイプのコードは、実際のメソッドが少し複雑になる可能性があるとしても、多くのイベントを持つオブジェクトをカプセル化するクラスをクリーンで読みやすく保つのに役立つと思います。
c# - スレッドとイベントの同期
私のコンソール アプリケーションでは、スレッド内でのイベントの同期が困難になります。
アプリケーションは、いくつかの乱数の後にスレッド ブロックが続き、EventWaithandleデータ スレッドが終了した後、コンソールに出力されて結果を返します。
目的は、次のような方法でデータを印刷することです
*ランダムデータ
スレッドブロック
ランダムデータ
スレッドブロック
....
スレッドの終了
...*
サンプル出力
1234
スレッド 2 ブロック
2345
スレッド 0 ブロック
3456
スレッド 1 ブロック
....
スレッド 1 の終了
スレッド 4 終了
....
その方法でスレッドとスレッド内のイベントを同期する方法。
c# - ManualResetEvent - ここで競合状態がどのように発生する可能性がありますか?
ManualResetEvent
here を使用して、同時環境での内部アクションが同時に呼び出されないようにすることmyMethod()
ができるかどうかを判断しようとしています。
編集- 潜在的にタイムアウトを追加できるようにしたいので、lock() の代わりに ManualResetEvent を使用していることに注意してください。
windows - Windowsカーネルのイベントオブジェクトが自動リセットされているか手動リセットされているかを確認するにはどうすればよいですか?
Windowsでは、(名前付きの)イベントオブジェクトを作成できます。
イベント(Windowsの同期プリミティブ)は、自動リセットタイプ(この場合はセマフォの一種と言えます)にすることも、手動リセットタイプにすることもできます。この場合、誰かがリセットするまで設定されたままになります。
さて、CreateEvent、OpenEvent、SetEventなどのドキュメントから、イベントが作成されると、それが自動リセットか手動リセットかを判断する方法はないようです。
私は、1つのプロセスが名前付きイベントを作成し、2番目のプロセスがこのイベントを操作する必要がある状況にあります(名前が渡され、イベントを開いて最終的に通知します)。イベントは、すべてが意味をなすために常に手動リセットイベントである必要があるため、手動リセットイベントであることを確認するために、2番目のプロセスにチェックを追加したいと思います。これを確認する方法はありますか?
(はい、私の状況ではもっと便利です。コードが自動リセットイベントを作成し、それをこのプロセスに渡すと、とにかくバグになるからです。しかし、バグは発生します。私はそれらを検出することができます。)
c# - 手動リセットイベントでメソッドを実行する際の問題
を使用するメソッドを構築していますが、メソッドをManualResetEvent
開始した後、それを実行できませんWaitOne
。これが私のメソッドのコードです。コードは、呼び出しに対して実行されるまでコードを実行しwait.WaitOne()
ます。ありがとう!!
c# - 大量のシステムスレッドを作成し、MREを待機することの影響はありますか?
非常に大規模なアプリケーションでメモリの急増を修正しようとしています。これがメモリにどの程度の影響を与えるかはわかりませんが、次のことに気づきました。
- アプリケーションはカスタムスレッドプールを使用して、すべての高価なタスクを実行します
- アプリケーションはすべての着信タスクを実行します
- タスクは、何千ものサブタスクで構成できます
- スレッドプールは一度に{T}タスクのみを実行し、新しいタスクを開始する前にタスクを完全に終了しますが、新しいシステムスレッド(スレッドクラス)を作成し、それに追加されたすべてのサブタスクに対して開始します
- サブタスクシステムスレッドは、スレッドプールスロットが解放されるまで手動リセットイベント(MRE)を即座にブロックするスレッド開始で開始されます。
したがって、このスレッドプールは数千のスレッドを作成できますが、他のタスクが完了する間、30を除くすべて(または構成したもの)がMREでブロックされます。
私の質問:
MREでブロックされた1000のスレッドは、メモリ/プロセッサにどのような影響を与えますか?このスパイクを修正する時間はあまりないので、それが最小限である場合は、問題を残して、時間があれば後のパッチで修正するように努めます。
また、この動作はスレッドプールで一般的ですか、それともこのサウンドに欠陥がありますか(私は欠陥に傾いていますが、確かに十分な背景がありません)。