3
public delegate bool FunctieCompara(int a, int b); this is the delegate

単純な関数呼び出し:

TyG.bubbleSort(TyG.max, TyG.Lungime, TyG.Secv);
TyG.bubbleSort(TyG.min, TyG.Lungime, TyG.secvMin);

私は持っていてClass Sorts、このクラスには次のようなメソッドがたくさんあります

public void bubbleSort(functionDelegate f, int n, int [] v)

とはるかに多くの種類が、このパラメータを使用します。他のクラスでは、私はのインスタンスを持っています

Sortst tyg = new Sorts()

スレッドを作りたい

Thread Thr = new Thread(new ThreadStart(tyg.bubbleSort(functionDelegate)))

私の場合、これが機能することはわかりませんでした。デリゲートを使用するメソッドでスレッドを使用するにはどうすればよいですか。私の場合、デリゲートは、max/minで並べ替えを行うための数値を比較するためのものですv[]bubbleSort(max, n, v)両方のソートをbubbleSort(min, n, v)同時に行うために2つのスレッドを作成したいと思います。それはとにかくスレッドが行うことです、とにかく誰かが私を少し助けてくれますか?

4

2 に答える 2

4

こんな感じですか?

var t1 = new Thread(
   o =>
   {
       tyg.bubbleSort(max, n, v1);
   });

var t2 = new Thread(
   o =>
   {
       tyg.bubbleSort(min, n, v2);
   });

t1.Start(); // start threads
t2.Start();

t1.Join(); // wait for both threads to finish
t2.Join();

その場で並べ替える場合は、別の配列 (v1v2) を使用する必要があることに注意してください。そうしないと、スレッドが同じ配列を上書きしてしまうからです。

興味がある場合はTask、.NET 4.0 の構成も調べてください。

または、クールになりたい場合 (.NET 4.0+):

Parallel.Invoke(
    () => tyg.bubbleSort(max, n, v1),
    () => tyg.bubbleSort(min, n, v2));
于 2012-04-06T12:06:42.120 に答える
2

.NET Framework 4 とタスク並列ライブラリの使用:

var factory = new TaskFactory(TaskCreationOptions.None,
                TaskContinuationOptions.None);
var sorts = new Sorts();
FunctieCompara greaterThanComparer = (a, b) => { return a > b; };
FunctieCompara lessThanComparer = (a, b) => { return a < b; };
var sorterWorkers = new Task[]
     {
        factory.StartNew(() => sorts.BubbleSort(greaterThanComparer, 0, new int[] {})),
        factory.StartNew(() => sorts.BubbleSort(lessThanComparer, 0, new int[] {}))
     };

Task.WaitAll(sorterWorkers);
于 2012-04-06T12:14:05.117 に答える