問題タブ [queueuserworkitem]

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.

0 投票する
3 に答える
662 参照

c# - 1人の読者、多くの作家

関連:ThreadPool.QueueUserWorkItemからの例外をキャッチする方法は?

ThreadPool.QueueUserWorkItem()によって開始されたバックグラウンドスレッドで例外をキャッチし、共有インスタンス変数を介してそれらをメインスレッドに伝播しています。

バックグラウンドスレッドはこれを行います:

_pendingException(複数のバックグラウンドスレッド)には複数の潜在的なライターがいるため、ロックで保護します。

メインスレッドでは、読む前にロックを取得する必要があり_pendingExceptionますか?または私は単にこれを行うことができます:


編集:
ps:リーダースレッドはホットパス上にあるため、ロックを取得したくないので、ロックを頻繁に取得および解放します。

0 投票する
3 に答える
1102 参照

c# - ThreadPool.QueueUserWorkItemを適切に使用していますか?

ASP.NETMVCアプリに取り組んでいます。イベントが発生したときにいくつかのスレッドを生成したかったのですが、スレッドの戻り値を気にせず、非同期呼び出しを行いたかったので、ThreadPool.QueueUserWorkItemを使用しています。

イベントにイベントハンドラー関数を添付しました

これが私がイベントを提起する方法です、

上記のコードはすべて同じクラスで発生しています。イベントハンドラー関数のみが他のクラスにあります。スレッドが完了した後、スレッドを強制終了する必要がありますか?私が何か間違ったことをしているなら、私に提案してください。

0 投票する
3 に答える
221 参照

c++ - 私のスレッドプールは4〜5スレッドを作成します。なぜ?

QueueUserWorkItem()関数を使用してスレッドプールを呼び出します。
そして、私はそれでたくさんの仕事を試みました。(約30000)
しかし、タスクマネージャーによって、私のアプリケーションは、スタートボタンを押した後にのみ4〜5スレッドを作成します。
スレッド制限のデフォルト数は約500であると述べたMSDNを読みました。
なぜ、アプリケーションでスレッドの数が少ないのですか?
私は自分のアプリケーションを高速化するのに疲れています。このスレッドプールが私のアプリケーションを遅くする理由の1つだと思います。

ありがとう

0 投票する
2 に答える
1327 参照

c++ - C++ で COM を使用した QueueUserWorkItem

C++ アプリケーションの DOM でクライアントが何百もの特定の種類のオブジェクト「Foo」を作成しているというパフォーマンスの問題があります。各 Foo インスタンスには、独自のスレッドを持つ独自の非同期作業キューがあります。明らかに、それはスケーリングしません。

ワーク キュー間でスレッドを共有する必要がありますが、車輪の再発明はしたくありません。XP をサポートする必要があるため、Vista/Win7 スレッド プールを使用できません。各キュー アイテムを処理するために必要な作業には、マルチスレッド COM アパートメントでの COM 呼び出しの作成が含まれます。XP スレッド プールのドキュメントには、スレッド ワーカー関数のコールバックで MTA アパートメントを使用して CoInitializeEx() を呼び出しても問題ないと書かれています。テストアプリを作成し、これが機能することを確認しました。WorkItem コールバック関数で CoInitializeEx/CoUninitialize ペアを使用する場合と使用しない場合で、アプリを 100 万回反復実行させました。CoInit* 呼び出しで 35 秒、呼び出しなしで 5 秒かかります。これは、私のアプリケーションにとってオーバーヘッドが多すぎます。スレッド プールはプロセスごとであり、サード パーティのコードは自分のプロセスで実行されるため、そうではないと想定しています。

以上のことから、Win32 スレッド プールを使用する方法はありますか? 何か足りないのでしょうか、それとも XP スレッド プールは高パフォーマンスの COM アプリケーションには役に立たないのでしょうか? 独自のスレッド共有システムを作成する必要がありますか?

0 投票する
7 に答える
5378 参照

c# - C# ThreadPool を使用する場合、ターゲット メソッドに複数のデータを渡すことはできますか?

ThreadPool.QueueUserWorkItem (WaitCallback, Object)ターゲットメソッドとデータでスレッドを開始するために使用します。メソッドに複数のデータを渡すことはできますか? の 2 番目のパラメーターはQueueUserWorkItem (WaitCallback, Object)配列にすることができますか?

0 投票する
3 に答える
1413 参照

c# - C# スレッド キューの同期

こんにちは、GUI を保持せずにいくつかのオーディオ ファイルを再生しようとしています。以下はコードのサンプルです。

状況は、サンプルが順番に再生されていないことです。サンプルが順番に次々と再生されるように、これを修正する必要があります。

どうすればこれを実装できますか?

ありがとうございました。

編集:ThreadPool.QueueUserWorkItem(new WaitCallback(FireAttackProc), fireResult);

すべてのサウンド クリップを FireAttackProc に配置しました。これが行われず、私が望むのは、スレッドが実行を停止するまで待ってから、新しいスレッドを開始して、サンプルが重複しないようにすることです。

0 投票する
5 に答える
1559 参照

c# - ThreadPool.QueueUserWorkItem の C# マルチ CPU

以下を使用するプログラムがあります。

Windows7 と Vista では正常に動作します。

XPで実行しようとすると、結果が他のものと少し異なります。

QueueUserWorkItem を適切に実行するには、デュアル CPU システムが必要ですか?

テストしようとした XP には、.Net 3.5 がインストールされていました。

入力は大歓迎です。

編集: コールバック プロシージャは、一連のサウンド ファイルを再生します。win7 と vista では、全員がプレイします。しかし、XP ではそのうちの 2 つだけが再生されます。プログラムから例外はありません。

編集: はい、XP ボックスはシングルコアです。5歳以上。

編集: 私のアプリは Winsock を使用し、XP マシンでクライアントとサーバーの両方を実行しました。マシンごとに 1 つのインスタンスで実行してみて、どのように反応するかを確認します。

編集:どのように音を演奏していますか?

0 投票する
1 に答える
2673 参照

c++ - Windows スレッディング: beginthread または QueueUserWorkItem (C++)

C++ のスレッド化されたメソッドに beginthread または QueueUserWorkItem を使用するかどうか疑問に思っています。2 つの API の違いは何ですか? また、どのようなコンテキストでより適していますか?

ありがとう、

ところで、私はこの質問を読みましたWindows threading: _beginthread vs _beginthreadex vs CreateThread C++

0 投票する
2 に答える
906 参照

c# - Windowsサービスが完全に起動していません

この小さなWindowsサービスをC#で作成しましたが、ThreadPoolコードに問題があり、Windowsサービスが完全に開始されない可能性があります。知っておく必要がある場合は、Windowsサービスは完全に実行されているように見えますが、サービスコンソールを見ると、「開始中」と表示されています。サーバーを再起動すると、自動起動に設定しているのに、サービスが再び停止したようです。

以下の私のコードを参照してください:

0 投票する
1 に答える
376 参照

c++ - NTのQueueUserWorkItemで作成されたワーカースレッドからCOMを呼び出すにはどうすればよいですか?

を使用してNTスレッドプールにスレーブ化した一連のタスクがありますQueueUserWorkItem。WMI内のデータにアクセスするには、これらの個別のスレッドからCOMを呼び出す必要があります。ただし、正しい呼び出しを行うCoInitializeEx必要があるかどうかはわかりません。

基本的に、CoInitializeExドキュメントには、呼び出しはスレッドごとに1回行う必要があると記載されています。しかし、私はこれらのスレッドを所有していません—NTは所有しています。それらがいつ作成または破壊されるか、あるいはその性質のものかはわかりません。基本的に、スレッドルーチンの最初に::CoInitializeEx()(with )を呼び出し、次にスレッドルーチンの最後に呼び出しますか?COINIT_MULTITHREADED::CoUninitialize()