首页新闻找找看学习计划

线程池还没运行完毕,主函数就结束了,怎么办?

0
悬赏园豆:20 [已解决问题] 解决于 2009-10-23 21:47

比如下面的例子:

 

Code
//工作函数:输出n的值
public static void WorkFunction(object n)
{
Console.Write(n
+ "\t");
}

static void Main(string[] args)
{
//向线程池中添加100个任务
for (int n = 1; n <= 100; n++)
{
ThreadPool.QueueUserWorkItem(
new WaitCallback(WorkFunction), n);
//Console.Write("a");

}

Console.WriteLine(
"Main");
}

输出的结果总是Main,或者再加少数几个数字。

另外,主线程和线程池里的线程的优先级是相同的吗?

谢谢

 

寒飞雨的主页 寒飞雨 | 初学一级 | 园豆:90
提问于:2009-10-21 18:50
< >
分享
最佳答案
0

主线程结束时,线程池还没执行完毕但也被销毁,所以每次总输出主线程结果和少数线程池中的结果;

优先级应该是默认的基本,此种线程池的中线程的优先级不受程序控制;

收获园豆:20
winzheng | 大侠五级 |园豆:8797 | 2009-10-22 00:07
其他回答(2)
0

bool isOk = false;

while(isOk)
{
    Thread.Sleep(1000);
}

for(int n=1;n<=100;n++)
{
    ThreadPool.QueueUserWorkItem((o) ={
    Console.Write(n + "\t");
    isok = n == 100;
});
}

James.Ying | 园豆:1472 (小虾三级) | 2009-10-22 10:46
isok = n == 100; 是什么意思?
支持(0) 反对(0) 天堂口 | 园豆:514 (小虾三级) | 2009-10-22 14:29
应该是isok = (n == 100)的意思吧。 但是n==100是,可能前面的线程还没执行完。从输出结果来看,线程的执行并不是完全按顺序的。
支持(0) 反对(0) 寒飞雨 | 园豆:90 (初学一级) | 2009-10-22 17:23
0

通过EventWaitHandle进行线程同步

滔滔踏浪 | 园豆:155 (初学一级) | 2009-10-23 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册