0

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

ThreadPool.QueueUserWorkItem(new WaitCallback(FireAttackProc), fireResult);

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

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

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

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

入力は大歓迎です。

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

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

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

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

            SoundPlayer fire = new SoundPlayer(Properties.Resources.fire);
            fire.PlaySync();
            fire.Dispose();
4

5 に答える 5

1

Vista と Windows 7 は、Windows XP とは異なる方法でオーディオを処理するため、おそらくそれが問題の本当の原因です (つまり、 とは関係ありませんQueueUserWorkItem)。

どのようにサウンドを再生していますか (これにはさまざまな方法があります)。

編集: 「一連の」サウンドを再生していると言うとき、次から次へとサウンドを再生しようとしているということですか、それともたくさんのサウンドを同時に再生しようとしているということですか?

于 2010-04-06T16:38:56.740 に答える
1

主な違いは、シングル コア システムでは一度に 1 つのスレッドしか実行できないことです。プログラムが適切に設計されている場合、これは重要ではありません。オペレーティング システムがスレッドのインとアウトを切り替えて、これを管理するからです。

シングル コア システムで違いが見られる場合は、コードに競合状態がある可能性が高いです。唯一の違いは、OS が両方のスレッドを同時に実行できないため、時間がかかることです。

于 2010-04-06T16:23:13.137 に答える
0

サウンド ファイル再生 API で問題が発生している可能性があります。以下のリンクは、C# アプリから PInvoke を使用して、複数のサウンド ファイルを非常に速い間隔で、またはほぼ同時に再生する際の問題について説明しています。これはあなたの問題に似ていますか?

http://www.hanselman.com/blog/CategoryView.aspx?category=BabySmash&page=3

于 2010-04-06T16:33:41.860 に答える
0

あなたは正確に何を見ましたか?

スレッドのタイミングは非決定論的であるため、シングル プロセッサ マシンで実行した場合に異なる結果が表示されたとしても驚くことではありません。これは、1 つのコアのみ (ハイパースレッディングなし) では、1 つの命令が一度にしか実行できないため、真の並列実行が見られないためです。

ただし、Windows XP は、Windows 7 や Vista と同様に複数のコアをサポートしています。あなたが実行した XP マシンは古いもので、CPU が 1 つしかなかったと思いますか?

于 2010-04-06T16:24:50.363 に答える
0

ThreadPool マネージャーの動作が重要です。コア数よりも多くのスレッドをスケジュールすることを慎重に回避しようとします。そのため、XP マシンにシングルコア CPU が搭載されている場合、実行できるスレッドは 1 つだけです。スレッドが「スタック」してタイムリーに完了しない場合にのみ、別のスレッドの開始が許可されます。これらのスケジューリングの決定は、1 秒に 2 回行われます。

スレッドを使用してサウンドを再生していることを考えると、スレッド プール スレッドは適切なソリューションではありません。独自のスレッドを作成する必要があります。

于 2010-04-06T16:49:22.093 に答える