具有委托参数的函数的 C# 启动线程
本文关键字:函数 启动 线程 参数 | 更新日期: 2023-09-27 18:30:27
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)))
我没有弄清楚这个东西在我的情况下有效,我如何将线程与使用委托的方法一起使用,在我的情况下,委托是比较数字以在v[]
中进行排序的max/min
.我想制作 2 个线程来同时bubbleSort(max, n, v)
和bubbleSort(min, n, v)
两种排序。无论如何,这就是线程的作用,无论如何,任何人都可以帮我一点?
你的意思是这样吗?
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();
请注意,如果你是就地排序,你应该使用不同的数组(v1
和v2
),否则线程将覆盖同一个数组。
如果您有兴趣,还可以查看 .NET 4.0 的Task
构造。
或者,如果你想很酷 (.NET 4.0+):
Parallel.Invoke(
() => tyg.bubbleSort(max, n, v1),
() => tyg.bubbleSort(min, n, v2));
使用 .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);