Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#具有委托参数的函数的启动线程_C#_Multithreading_Delegates - Fatal编程技术网

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