日期:2014-05-17  浏览次数:20663 次

关于线程的两个问题:1.开的线程太多,CPU占用率太高,可否用线程池优化 2.退出程序时退出线程有没有必要等到线程的IsAlive为false再退出
1. 程序中开了6,7个线程,运行的时候CPU占用率达到60%-70%,太高了,影响性能,用线程池可否优化。线程池我还没用过,大概知道这个名词。
2. 在退出程序的时候在Form_closing()方法中,让线程都终止,用的是让标志变量为fasle,当然没用Abort方法,有没有必要等到线程的IsAlive状态为false的时候再退出,程序中我是加了循环等待到IsAlive的状态为false再退出程序,但是这样会造成退出很慢,有时候还会出现死循环,线程的IsAlive迟迟不为false。起初这样做的原因是怕不等到线程彻底结束,造成不安全因素。
   还有我还试过,用标志变量让线程终止,等待线程的IsAlive状态为false后,线程就无法再开启,报ThreadStateException,IsAlive状态值始终为false。

         if (threadJoyStickMaxon != null)  
           {
               while (threadJoyStickMaxon.IsAlive)
               {
                    Thread.Sleep(1);
              }
              threadJoyStickMaxon = null;
          }
          threadJoyStickMaxon = new Thread(new ThreadStart(ManageThreadJoystickMaxon));
          threadJoyStickMaxon.Start();

------解决方案--------------------
1. 消耗高,线程池也拯救不了你,只能说你的处理太费CPU,和线程无直接关系,要么优化你的处理代码,要么拿时间换空间,在高频率循环处理的地方做Thread.Sleep,通过延长线程的处理时间来减低CPU的消耗;或者降低线程的并发数;
2. threadJoyStickMaxon.IsBackground = true;

------解决方案--------------------
你的线程执行的东西太耗时间和CPU吧,能把他分成几个任务来做不?
------解决方案--------------------
引用:
引用:大量资源浪费在 
 while (threadJoyStickMaxon.IsAlive)
               {
                    Thread.Sleep(1);
              }
如何谈优化
这是在程序退出的时候判断线程的IsAlive是否为false,贴代码的……

只要你做任务处理完了。就可以退出。你可弄一个标志标志一下你的任务是否结束。只要结束了。就可以安全的结束线程,无论是abort还是你的这种IsAlive标志退出都是安全的。