2012-04-06 66 views
3
public delegate bool FunctieCompara(int a, int b); this is the delegate 

简单的函数调用:C#开始有委托函数的参数线程

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)这两种。无论如何,这是线程,无论如何任何人都可以帮我一点点吗?

+0

1)如何为'functionDelegate'定义? 2)你的目标是什么?只是开始两种并行或在某个预期的地方测量/获得结果? – sll 2012-04-06 12:02:26

+0

开始并行排序,结果的空间照顾,我​​使用diferent v []为最大和最小,我想学习线程使用此,这是主要的ideea :) – TyGerX 2012-04-06 12:07:09

+0

我很好奇你为什么想要在两个线程中同时运行它。考虑到你正在使用bubblesort,我猜你不是为了速度而做的。这是为了某种类型之间的比较?还是仅仅是您选择尝试学习多线程的例子? – Weeble 2012-04-06 12:31:58

回答

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),否则线程将被覆盖在相同的阵列。

如果您有兴趣,也可以查看.NET 4.0的Task构造。

另外,如果你想成为酷(.NET 4.0+):

Parallel.Invoke(
    () => tyg.bubbleSort(max, n, v1), 
    () => tyg.bubbleSort(min, n, v2)); 
+0

我将trey这:)而且我知道使用不同的载体.. – TyGerX 2012-04-06 12:09:31

+0

如何同时启动它们? – TyGerX 2012-04-06 12:14:07

+0

@TyGerX:检查我的编辑。 – Tudor 2012-04-06 12:16:42

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); 
+0

我认为他想开始两种泡沫排序,随着排序的增加和减少,而不是几种不同的排序。而对于你描述的情况不会'Parallel.Invoke'更充足? – Tudor 2012-04-06 12:15:43

+0

这不是一个问题,只是通过不同的论据 – sll 2012-04-06 12:17:27

+0

不,但这有助于:我可以做到这一点,它是有用的知道谢谢,这不是线程,因为我知道,但似乎是有用的线程,thx为ideea – TyGerX 2012-04-06 12:18:59