問題タブ [worker-thread]
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++ - ワーカースレッドでの操作をキャンセルするときにメモリリークを防ぐにはどうすればよいですか?
現在、数学的分析で構成されるデスクトップアプリケーションに取り組んでいます。GUIとc++で記述されたプロジェクトにqtを使用しています。ユーザーが分析を開始すると、ワーカースレッドを開いてプログレスバーを開始します。これまではすべて問題ありませんでしたが、ユーザーが操作をキャンセルすると問題が発生します。操作が複雑で、複数の関数とオブジェクトを使用しています。いくつかのメモリを割り当て/割り当て解除します。キャンセル操作で回復するにはどうすればよいかを知りたいメモリリークが発生する可能性があるため、キャンセル操作を堅牢かつ安全に行うには、どのパターンまたは方法を使用する必要がありますか?
私の考えは例外をスローすることですが、操作は非常に複雑なので、すべての関数にtry-catchを適用する必要がありますか、それともより一般的な方法であるパターンがあります。
編集:問題は、オブジェクトがスコープ間で転送されるため、shared_ptrまたはauto_ptrで問題が解決しないことです。フラグのアイデアは解決できますが、非常に多くのコードが必要であり、簡単な方法があるはずです。
c# - ThreadStateをポーリングせずにスレッドの実行が終了したかどうかを確認するにはどうすればよいですか?
ワーカースレッドの実行がいつ完了したかを知るためのエレガントな方法はありますか?それにより、ワーカースレッドが生成したリソースにアクセスできますか?
たとえば、ワーカースレッドがを使用してSQLServerのリストを照会した場合
ServersSqlDataSourceEnumerator.Instance.GetDataSources();
結果をDataTable変数に保存しました。このデータテーブル変数がいつ入力されたか、または使用可能になるかを知るために、どのメカニズムを使用できますか。ThreadStateをポーリングしたくありません。イベントが完了したらイベントを発生させて、結果を使用してアクションを実行できるようにするのが理想的です。
ありがとう!
c# - C#、イベント ハンドラー、およびスレッド化
私は小さなチャットアプリを書いていて、このイベントハンドラーがあります:
o_Typing
から派生したクラスのメソッドTabPage
です。基本的に、各会話には独自のタブが必要です。
イベント ハンドラーは、別のスレッドで実行されている Chat オブジェクトによって起動されます。UI 用に 1 つのスレッドがあり、チャットの会話ごとに別のスレッドがあります (新しいデータについてサーバーをポーリングし続けるため)。
イベントが発生すると、MessageBox
ポップアップが表示されますが、タブのキャプションは変更されません。イベントが一度発生すると、二度と発生しないため、UI スレッドで定義されているにもかかわらず、イベントがワーカー スレッドで呼び出されていると思われます。
Invoke()
イベントをワーカー スレッドから呼び出して、UI スレッドで実行するために使用するにはどうすればよいですか?
.net - 空のワーカー スレッド、それらは何ですか?
.NET Framework 3.5 の WinForms アプリケーションをデバッグしているときに、名前のない「ワーカー スレッド」を見つけました。
アプリケーションを開いたときに、デフォルトでワーカー スレッドが 1 つあることはわかっています。ただし、デバッグの途中でデバッガーを一時停止して「スレッド」ウィンドウを見ると、約 5 つ以上の同様のスレッド (優先度 = 通常) が表示されます。
アプリケーションによって開かれたすべてのスレッドには名前が付けられているため、少なくとも Thread.Start() を介してコードから開かれることはありません。
ダブルクリックしようとすると、VS.NET もコードを見つけることができません。
これらのスレッドは何ですか? それらは正常ですか、それとも一部の操作で何らかの形で空のスレッドが残されていますか?
それらはタイマーまたは同様の明白でないコントロールである可能性がありますか?関数はバックグラウンドで一時スレッドで動作しますか?
c# - エンドレスワーカースレッドを作成する適切な方法は?
多くの初期化(強力なマシンでは1〜2秒)が必要なオブジェクトがあります。初期化されると、通常の「ジョブ」を実行するのに約20ミリ秒しかかかりませんが
アプリが使用するたびに再初期化されるのを防ぐために(通常の使用では1秒間に50回、またはまったくない場合があります)、ジョブキューを指定して実行することにしました。独自のスレッドで、キューにそのための作業があるかどうかを確認します。ただし、作業の有無にかかわらず、無期限に実行されるスレッドを作成する方法が完全にはわかりません。
これが私がこれまでに持っているものです、どんな批評も歓迎されます
考えた後:私は、このスレッドを永久に実行させるために、このスレッドを優雅に強制終了する必要があるかもしれないと考えていたので、スレッドを終了するように指示するJobタイプを追加すると思います。このようなスレッドを終了する方法についての考えもありがたいです。
c++ - Boostスレッド固有のストレージに関する質問(boost / thread / tss.hpp)
ブーストスレッドライブラリには、スレッド固有の(ローカル)ストレージの抽象化があります。ソースコードをざっと見てみましたが、TSS機能は、boost :: threadから作成された天気に関係なく、既存のスレッドを使用するアプリケーションで使用できるようです。つまり、特定のコールバックがカーネルに登録されていることを意味します。スレッドまたはプロセスがスコープ外になるときに、TSSオブジェクトのデストラクタを呼び出す可能性のあるコールバック関数をフックします。これらのコールバックを見つけました。
さまざまなWebサーバーのワーカースレッド内にOpenSSLからHMAC_CTXをキャッシュする必要があります(私がやろうとしていることについては、この詳細な質問を参照してください)。そのため、スレッドの存続期間(Web)を制御しません。 -サーバーは行います。したがって、boost::threadによって作成されていないスレッドでTSS機能を使用します。
キャッシングロジックの実装を開始する前に、仮定を検証したかったのですが、ロジックに欠陥はありますか?
c++ - OCCI createEnvironment がスレッドをブロックする
タスクをワーカー スレッドに分散するメイン スレッドがあるマルチスレッド アプリケーションを作成しています。タスクに従って、ワーカー スレッドはグローバルな occi 環境を使用して接続を作成します。ワーカー スレッドがタスクを完了すると、接続が閉じられます (終了時に例外がスローされることはないと確信しています)。
私の問題は、しばらくすると (場合によっては 5 分、場合によっては 5 時間)、スレッドが環境から接続できず、そこでブロックされることです。
何が問題になる可能性がありますか?
c# - WPF ワーカー スレッドは、コンシューマー通知による中断が必要です
こんにちは、プロデューサーとコンシューマーのパターンがあります。WPF UI は、パケットをリッスンしてタスクをキューに入れている、長時間実行されるワーカー スレッドの補助的なものです。実際には、すべてのメッセージがキューから取り出されてから、UI コンシューマーが処理します。
私が抱えている問題は、すべての WPF GUI コンポーネントを担当する UIcontroller クラスがあることです。デキューされた各タスクを表示する新しいウィンドウを開き、参照されたウィンドウのスレッドセーフなコレクションを保持します。
Despatcher.BeginInvoke で通知します。そこに驚きはありません。
私が抱えている問題は、UIController クラスが構成された数のウィンドウを正常に開いた場合に、ワーカー スレッドを一時停止/文字通り停止したいということです。開いているウィンドウの数には制限があります。開いているウィンドウの数が範囲内に戻ったら、キューの処理を再開します。このクラスでウィンドウ コレクションを保持し、参照によって更新される呼び出しを介して UI に渡そうとしましたが、Begin Invoke は非同期であり、ワーカー スレッドのループでカウントが時間内に更新されません。
UIcontrollerクラスで開いているウィンドウの数をテストし、そこからタスクを無視して再キューイングすることもできました-基本的に何もしません。しかし、私はよりクリーンなソリューションが欲しいです。
ある種のクリーンなコールバックを行うことはできますか?
java - 非 EJB 負荷分散アプリケーションを設計する方法は?
jms トピックをリッスンしている Java クラスProcessor
があり、メッセージが到着する速度に追いつくのに苦労しているため、同時進行することにしました。
トピックをリッスンする単一のクラスの仕事は、メッセージをワーカー スレッドのプールに渡すことであり、事実上ロード バランサーになります。また、2 つのワーカーが同じ顧客のメッセージを処理するのを防ぐ必要があります。
これについてはインターネット上にかなり多くの情報があると予想していましたが、アプリケーション サーバーがプールを管理し、バランスを取る EJB の使用を示唆しているようです。これは非常に一般的な問題であるに違いないと確信していますが、支援するライブラリやデザイン パターンが見つからないようです。自分のコードを掘り下げて書く必要があるのでしょうか?