問題タブ [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# - new AutoResetEvent (true) C# での使用法?
私は考えていた 、
true
の ctor にa を渡したいと思うのはなぜAutoResetEvent
ですか?
waitHandle
電話をかける人WaitOne()
が実際に待つように を作成します。
でインスタンス化すると、true
すぐにシグナルが送信されたかのようになります。これは、待機のない通常のフローのようなものです。
出力:
に変更する EventWaitHandle _waitHandle = new AutoResetEvent (true);
と、出力は次のようになります。
質問:
- なぜ私はこれをやりたいのですか?(通過
true
)?
c# - NativeWindowでメッセージを待つ
私がやろうとしているのはWM_TIMER
、プロセス内のウィンドウでメッセージをキャッチして待つことです(ただし、私が制御できないメッセージです)。
AutoResetEvent
メッセージを待つためにを使用しようとしています。
このWaitForMaterialUpdate
メソッドはNativeWindow
をウィンドウに接続し、メッセージを受信するまでブロックします。
これは私が使用しているコードです:
私はあまりデバッグ可能な環境ではありませんがMessageBox
、ウィンドウが実際WM_TIMER
に待機期間中にメッセージを受信していることを確認しましたWaitOne
が、戻る前に常に5000ミリ秒のタイムアウト期間全体を待機しています。
私がどこで間違っているのか考えていますか?
windows - Windowsカーネルのイベントオブジェクトが自動リセットされているか手動リセットされているかを確認するにはどうすればよいですか?
Windowsでは、(名前付きの)イベントオブジェクトを作成できます。
イベント(Windowsの同期プリミティブ)は、自動リセットタイプ(この場合はセマフォの一種と言えます)にすることも、手動リセットタイプにすることもできます。この場合、誰かがリセットするまで設定されたままになります。
さて、CreateEvent、OpenEvent、SetEventなどのドキュメントから、イベントが作成されると、それが自動リセットか手動リセットかを判断する方法はないようです。
私は、1つのプロセスが名前付きイベントを作成し、2番目のプロセスがこのイベントを操作する必要がある状況にあります(名前が渡され、イベントを開いて最終的に通知します)。イベントは、すべてが意味をなすために常に手動リセットイベントである必要があるため、手動リセットイベントであることを確認するために、2番目のプロセスにチェックを追加したいと思います。これを確認する方法はありますか?
(はい、私の状況ではもっと便利です。コードが自動リセットイベントを作成し、それをこのプロセスに渡すと、とにかくバグになるからです。しかし、バグは発生します。私はそれらを検出することができます。)
vb.net - AutoResetEventがメモリエラーを引き起こすのはなぜですか?
以下に、私の最新のコーディングの心痛の原因を示します。これは、セカンダリスレッドで派生クラスのメソッドを実行する基本クラスの小さなメソッドです。このコードは、5分ごとに開始されるWindowsサービスで約5回実行されます。
しばらくの間は正常に動作します。最終的にはメモリが不足します。その時点から、サービスが再起動されるまでメモリエラーがスローされます。実際にスローされたエラーのテキストは次のとおりです。
AutoResetEventを使用してwhileループを制御し始めるまで、これらのエラーは実際には発生し始めませんでした。私はSystem.Threading.Thread.Sleepを使用していました。ただし、sleepメソッドを使用した場合、呼び出すcomオブジェクトの1つは実行されませんでした。AutoResetEventに変更すると、そのコードが実行されますが、comオブジェクトを呼び出すメソッドが、実行する派生クラスの1つでなくても、メモリエラーが表示されるようになりました。
助けてください。:)
c# - AutoResetEvent による 2 つのスレッドの同期
を実装しようとしていますAutoResetEvent
。目的のために、私は非常に単純なクラスを使用します:
しかし、これは機能していません。使用法は非常に簡単に思えるので、ここで実装するロジックの何が問題で、どこに問題があるかを誰かが教えてくれれば幸いです。
c# - AutoResetEvent.WaitOne() 中に Usercontrol をレンダリングする
悪い質問かもしれませんが、いくつかのコマンドをサーバーに送信するクライアント アプリがあります。コマンドを送信するための小さな関数を作成しました。これは、メッセージが受信されるまで単純に待機しAutoResetEvent.WaitOne()
、メッセージを文字列として返します。この関数は、sth を実装するための高速な方法だったので、クライアント アプリで頻繁に使用しました。
サーバーからの応答を待っている間、このアプリで LoadingCircle を表示したいと思います。そのための sth をメッセージ受信関数で既に作成しました。これは単にフォームにコントロールを追加するだけです。これは機能していますが、数ミリ秒後に再描画される UserControl(Loading Circle) は再描画されません。AutoResetEvent.WaitOne()
GUIスレッドをブロックしています。メッセージ受信部分を別のスレッドに移動できることはわかっていますが、 150x以上のメッセージ受信関数を使用したため、この関数の概念を変更したくありません。
だから私の質問は次のとおりです。待機中にGUIイベントを実行するための怠惰な方法はありますか、それともLoadingCircleコントロールの描画部分を別のスレッドに移動できますか?
どんな助けでも大歓迎です
c# - 異なるスレッドからメソッド AutoResetEvent を呼び出すのは安全ですか?
異なるスレッドからメソッド AutoResetEvent を呼び出すのは安全ですか? または、異なるスレッドからのオブジェクトの呼び出しを避ける必要がありますか?
c# - 現在実行中のメソッドを判別する
次のコードを想定します
質問
CLR イベントを "キャプチャ" する方法はありますか?それは、イベントやスレッドのループからのものですか?
どうして
ソフトウェアの根幹に呼び出しフックを書き込む必要はありません。これは観察可能な問題です (うーん、アイデアが来ています...) (実際には、自動化タイプの機能の UI 呼び出しパターンを観察します)。
c# - 無期限にブロックしているスレッドの 1 つを (郵便番号に従って) 再現するにはどうすればよいですか?
私は質問を理解しようとしています(そして、それぞれに対する答え):
以下のコードを添付して
コード内のコメントは次のことを示しています。
しかし、スレッドのいずれかが無期限にブロックされる方法と理由がわかりません...
コードを実行しようとしましたが、無期限のブロックを監視しませんでした...
この質問(およびそれぞれの回答)で何が欠けていますか?
更新:
このコードを次のように起動していました:
また、無期限のブロックは見られません。
コードを実行した結果の出力は次のとおりです。
(スレッドが無期限にブロックされるという) 議論されたトピックを再現するために、コードを実行 (更新、変更、インクリメント) するにはどうすればよいですか?