首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

为啥小弟我的多线程不起作用

2012-05-08 
为啥我的多线程不起作用?C# codeThread[] MyThread new Thread[ReportExecuter.Length]for (int i 0

为啥我的多线程不起作用?

C# code
            Thread[] MyThread = new Thread[ReportExecuter.Length];            for (int i = 0; i < ReportExecuter.Length; i++)            {                MyThread[i] = new Thread(ThreadMethod);                MyThread[i].Name = i.ToString();                MyThread[i].IsBackground = true;                MyThread[i].Start();                MyThread[i].Join();            }


[解决办法]
怎么没起作用了
C# code
 Thread[] MyThread = new Thread[ReportExecuter.Length];            for (int i = 0; i < ReportExecuter.Length; i++)            {                MyThread[i] = new Thread(ThreadMethod);                MyThread[i].Name = i.ToString();                MyThread[i].Start();            }
[解决办法]
把 MyThread[i].Join();去掉
[解决办法]
+1
探讨

把 MyThread[i].Join();去掉

[解决办法]
所谓不起作用是指?
[解决办法]


控制台程序吗?

[解决办法]
最简单的改进就是把Thread.Join放到循环后面。

你原先代码是,开一报告线程并等它结束,然后循环下一报告(因此一次只有一个报告线程在运行)。
改进代码是,先循环把所有的线程都运行起来(多个报告线程在运行)。然后等待所有线程结束。
C# code
            Thread[] MyThread = new Thread[ReportExecuter.Length];            for (int i = 0; i < ReportExecuter.Length; i++)            {                MyThread[i] = new Thread(ThreadMethod);                MyThread[i].Name = i.ToString();                MyThread[i].IsBackground = true;                MyThread[i].Start();            }            for (int i = 0; i < ReportExecuter.Length; i++)            {                MyThread[i].Join();      //<--            }
[解决办法]
AutoResetEvent / ManualResetEvent 试试看
[解决办法]
你的 ThreadMethod 没有针对多线程进行设计继续用单线程一样的,

你怎么能指望电脑会那么智能的帮你把串行算法转成并行。。

Threading 是允许你在多个线程上执行,但不可能帮你完成并行算法,耗时一样一点都不意外
[解决办法]
哦,说耗时嘛,你倒说对了。有些情况下用多线程或许耗时还会多一点呢。也就是说得分情况决定是否用多线程。本身工作时间不很长的,你要分线程,开线程还要占用时间呢。所以要科学合理的运用多线程。

热点排行