在生成一个线程的时候,需要用ThreadStart先生成代理。请看下面两行代码:---------------------------------------------------------------Program One.TestClass tc = new TestClass();Thread t1 = new Thread(new ThreadStart(tc.Run));
Thread t2 = new Thread(new ThreadStart(tc.Run));---------------------------------------------------Program Two.TestClass tc = new TestClass();ThreadStart ts = new ThreadStart(tc);Thread t1 = new Thread(ts);
Thread t2 = new Thread(ts);------------------------------------------------------------请问上面两段程序有什么不同???
Thread t2 = new Thread(new ThreadStart(tc.Run));---------------------------------------------------Program Two.TestClass tc = new TestClass();ThreadStart ts = new ThreadStart(tc);Thread t1 = new Thread(ts);
Thread t2 = new Thread(ts);------------------------------------------------------------请问上面两段程序有什么不同???
你要开新的线程,当然要new ThreadStart对象。
请大家再看看代码一和代码二的不同之处。我的代码一是两个线程都new ThreadStart,而代码二是两个线程使用同一个ThreadStart对象。如果向上面的朋友说的是一样的,那么意思就是说,
当多次new ThreadStart(tc.Run)时总是返回同一个ThreadStart对象。
建立2个委托,给每个委托分别加了一个方法。
two:
建立一个委托,在这个委托上加了2个一样的方法。应该是这样,所以第2个相当于只加了一个。
TestClass tc = new TestClass();
而两个thread
t1 和 t2 都是要运行 tc.Run() 这段程序,
就是说tc 这个 TestClass 的实例里面的状态是这两个thread 共享的
这个说得对
one:
建立2个委托,给每个委托加了同一个对象实例的同一个方法。这两个委托本身就相同。
two:
建立一个委托,在这个委托上加了一个对象实例的一个方法。
=================================================
delegate 其实只是一个function pointer, 你把一个ThreadStart指向一个特定的实例里面的一个method(tc.Run), 然后的确可以重复使用它要看具体情况,这是不是你想得到的效果
比如说你有很多个 tc1,tc2..tc9, 每个都有不同的状态,都需要运行Run method, 那你就要定义不同的ThreadStart 指向不同的实例
program 1:
建立了两个ThreadStart对象,但是Delegate了同一个function.
最后两个不同的ThreadStart初始化了两个不同的Thread。
两个Thread运行的时候run同一个functionprogram 2:
建立了一个ThreadStart对象,并Delegate了一个function
这个ThreadStart初始化了两个不同的Thread.
两个Thread运行的时候run同一个function运行结果是一样的,这个毫无疑问。区别么就是两个delegate和一个delegate的区别。没啥,我举个相同的例子就知道了program 1:const int f=1;
int a=f;b=f;
printf(a);printf(b);
program 2:const int f=1
int a=f;
printf(a);printf(a);