我使用的是 继承Delhpi的线程类Thread类。创建了100了线程来使用。 
开始运行还好的都是正常的,而且每个线程都是有Sleep时间的至少30秒吧。但是过了 N个小时后,CPU到达了100%这个问题,调试也不知道怎么调试。请高手分析下。 有哪些情况下, 会出现这种问题。 应该怎么解决???

解决方案 »

  1.   

    谁让你在线程里用sleep的?sleep会引起阻塞,什么消息都处理不了
    用waitforsingleobject吧。
      

  2.   

    线程里面可以sleep,不会造成主程序阻塞。应该是别的原因。
      

  3.   

    我想死循环应该不是的 因为当CPU100%时,程序照常运行, 而且, 那些线程也工作正常。
    因为,功能都是反应出来的。
      

  4.   

    线程While 中用 sleep(0) 
    从设计的角度来说,有必要用100个线程吗? 除非是非常多核的CPU,要不然一般的程序实在是用不着这么多的线程.
      

  5.   

    关注,也碰到过这样问题,也是几个小时后CPU100%
      

  6.   


    线程中使用SLEEP的确不好,虽然他不会造成主进程的阻塞。但是他一样消耗CPU资源。建议使用其他的方式来实现等待功能。
    还有你可以测试下,CPU占用100%需要你100个线程中的几个同时工作才可以达到。
      

  7.   

    那如果不要Sleep, 如何让线程每30秒,执行一次While里面的句子各个线程都是独立工作的, 没有相关性
      

  8.   


    这样变下:
    A:THandle;
    A:= Tevent.create;
    线程里
    waitforsingleobject(A,30(秒));具体代码格式你修改下,【英文不好】。具体就是这样意思。如果A的事件永远不会触发的话!waitforsingleobject会30秒后自动退出。注意:waitforsingleobject进入函数后,退出的条件 只能是A被触发,或者后面的时间超时。不然退出不了这个函数。所以你在程序退出的时候,需要激活事件A.