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)我想制作 2 个线程来同时进行这两种bubbleSort(min, n, v)操作。无论如何,这就是线程的作用,无论如何,任何人都可以帮助我吗?

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 回答