0

.Net3.5 で複数のスレッド (現時点では少なくとも 3 つ) 間の通信を作成する必要があり、それぞれがプロデューサーとコンシューマーの両方です。スレッドの各ペア間でシグナルを送信する代わりに、私の考えは、次のようなクラスを格納するメッセージのキューを実装することです。

enum Signals { ObjectArrivedOnLightBarrier, ObjectLeftLightBarrier, CodeFound };
enum UnitID { GrabThread, ImageProcessingThread, SaveThread };

// Consumer shows who the message is intended for (and only that unit is allowed to remove it from the queue)
public class QueuedSignal
{
    Signals Message;
    UnitID Producer;
    UnitID Consumer;
}

メッセージが意図されていない場合、任意のスレッドがキュー内の最初のアイテムを覗いてそのままにしておくことができるという考え方です (他のメッセージがほとんどなく、そのうちの 1 つがこのスレッドを意図している可能性がある場合は問題になりません)。 .

複数のプロデューサーとコンシューマーがある場合、キューはスレッドセーフです。

4

2 に答える 2

1

Parallel Extensions for .NETの2008 年 6 月の CTP には、BlockingCollection<T>必要な処理を行うクラスが含まれていました。メソッドがなかったかもしれませんがPeek。そのライブラリは .NET 3.5 で動作しました。かなり使いました。

ダウンロードできる場所が見つかりませんでしたが、少し検索してみてください。

Reactive Extensions で利用できる場合がありますRx の新しいバージョンは .NET 4.5 用ですが、古いバージョンはhttp://www.microsoft.com/en-us/download/details.aspx?id=28568で入手できます。

于 2013-04-24T14:10:05.177 に答える