C#具有委托参数的函数的启动线程
简单函数调用:C#具有委托参数的函数的启动线程,c#,multithreading,delegates,C#,Multithreading,Delegates,简单函数调用: 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); 还有更多的种类,但有这个参数。在另一个类中,我有一个 public void bubbleS
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);
还有更多的种类,但有这个参数。在另一个类中,我有一个
public void bubbleSort(functionDelegate f, int n, int [] v)
我想创建一个线程
Sortst tyg = new Sorts()
我没有想到这件事在我的例子中是可行的,我如何使用线程和使用委托的方法,在我的例子中,委托是一个max/min
,用于比较数字,以便在v[]
中进行排序。我想制作两个线程来同时执行排序bubbleSort(max,n,v)
和bubbleSort(min,n,v)
。thread就是这么做的,不管怎样,谁能帮我一点忙吗?你是说像这样吗
Thread Thr = new Thread(new ThreadStart(tyg.bubbleSort(functionDelegate)))
请注意,如果要就地排序,则应使用不同的数组(v1
和v2
),否则线程将覆盖相同的数组
如果您感兴趣,还可以查看.NET4.0的任务
结构
或者,如果您想保持冷静(.NET 4.0+):
使用.NET Framework 4和任务并行库:
Parallel.Invoke(
() => tyg.bubbleSort(max, n, v1),
() => tyg.bubbleSort(min, n, v2));
var factory=new TaskFactory(TaskCreationOptions.None,
TaskContinuationOptions(无);
var sorts=新排序();
FunctieComara greaterThanComparer=(a,b)=>{返回a>b;};
FunctieComara lessthancomarer=(a,b)=>{返回asorts.BubbleSort(greaterThanComparer,0,new int[]{})),
factory.StartNew(()=>sorts.BubbleSort(lessthancomarer,0,newint[]{}))
};
Task.WaitAll(分拣工);
1)如何定义functionDelegate
?2) 你的目标是什么?只是为了并行地开始两个排序,或者在某个预期的位置测量/获取结果?开始并行排序,结果的空间得到了处理,我对max和min使用了different v[],我想了解线程在这方面的用法,这是主要思想:)我很好奇为什么要同时在两个线程中运行这个。考虑到您使用的是bubblesort,我猜您这样做并不是为了速度。这是为了在不同种类之间进行某种比较吗?或者这只是一个你尝试学习多线程的例子?如何同时启动它们?@TyGerX:我知道这对你有用。很高兴再看一看我发布的最后一个例子,因为这是一种非常紧凑的并行处理方式。我想他想用递增和递减排序开始两个冒泡排序,而不是几种不同的排序。对于您所描述的情况,调用将不会是并行的。调用将更充分?这不是一个问题,只是作为不同的参数不是,但这有帮助:D我可以这样做,知道是有用的谢谢,这不是我所知道的线程,但似乎作为线程是有用的,thx用于IDEA
Parallel.Invoke(
() => tyg.bubbleSort(max, n, v1),
() => tyg.bubbleSort(min, n, v2));
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);