郁 闷 中...

解决方案 »

  1.   

    用一些Sleep 这类的函数,让线程能有停顿。
      

  2.   

    如果是由于循环造成的,sleep之类的函数在2000下应该可以。
    如果是由于某个操作,如查询数据库、硬件通讯等等造成的,估计是没有办法了。
    贴出源码来看看。
      

  3.   

    在大的循环中加入一句
      sleep(0)
     一定有用的
      

  4.   

    sleep(0):同样占用100%.
    sleep(1):速度狂降4倍,占用率:4%;
    sleep(2):降8倍,占用率2%......
    还是治标不治本.
    sleep方法不可取.to:cuihl(存在即是合理) 
    是一个半死的循环:
    while true do ...这样的.
    现是探讨,没有具体代码.以后肯定会碰到.
    我的一个朋友已在这上面吃了大亏了...
      

  5.   

    sleep(50);或sleep(100)试试;
    我做的监控系统是那样,不过还是有小问题,
    在性能比较好的电脑上没问题,差的电脑就有慢的问题,
    正在完善中,各位有好的方法请贴出;
    或用QQ交流;101574896
      

  6.   

    我一般用sleep(10),我觉得效果还不错呢
      

  7.   

    sleep应不是合理解决问题的方法.
    肯定还有我们不知道的方法可以更好的解决.
    E文好的朋友可以看看DELPHI的HELP或官方站点
      

  8.   

    信不信由你,我认为正解仍然是sleep,当然,在主线程里面使用Application.processMessages;
    因为SLEEP函数精度大约50左右吧。。SLEEP(50)之内就足够了。
      

  9.   

    我认为是程序设计还有问题,临时解决办法只能用sleep,至于数多大自己看着办吧
      

  10.   

    SLEEP在不同系统中容易出莫名其妙的错误,详见<<DELPHI5开发人员指南>>.
    使用SLEEP一定会延时,否则无效.对于实时监控环境中,延迟是无法接受的.
    没有解了吗?
      

  11.   

    windows 本身就不是实时的操作系统,他的线程更不可能做到实时了。
      

  12.   

    据说SLEEP是最好的解决方法,也必须如此,我也问过好多人!
      

  13.   

    我想知道SLEEP 到底怎么用 ,有人可以提供代码吗?
      

  14.   

    sleep(0)。sleep并不是单纯的做个延时,他还会把当前线程剩余的CPU时间全部放弃,交给其他的线程去使用。
      

  15.   

    我试过了.SLEEP(0)无用.
    仍然100%CPU
      

  16.   

    与操作系统也有关。
    在NT内核的的系统下,sleep应该很管用。好像是NT对多任务的支持比98内核的好得多。
      

  17.   

    首先我们先理解一下Windows的多任务多线程:
    多线程的实现原理 
    创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动生成。然后可以由这个主线程生成额外的线程,而这些线程,又可以生成更多的线程。 
    在运行一个多线程的程序时,从表面上看,这些线程似乎在同时运行。而实际情况并非如此,为了运行所有的这些线程,操作系统为每个独立线程安排一些CPU时间。单CPU操作系统以轮转方式向线程提供时间片(Quantum),每个线程在使用完时间片后交出控制,系统再将CPU时间片分配给下一个线程。操作系统给每个线程分配不同的CPU时间片,在某一个时刻,CPU只执行一个时间片内的线程,多个时间片中的相应线程在CPU内轮流执行,由于每个时间片时间很短,所以对用户来说,仿佛各个线程在计算机中是并行处理的。操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。
      

  18.   

    忘了说我的环境是DELPHI7+Win2000
      

  19.   

    这与用哪个API有关,有些API要进行很多的运算,因此,CPU占用度就大了。
      

  20.   

    我的做法是减少sync函数对VCL资源的调用、用Sleep适当延迟
    但是对调用dll访问硬件设备遇上等待超时大量占用cpu资源好像没有办法。
    因此对于楼主的程序,即使使用了线程,还要看主程序是不是有死循环的情况,否则不应该100%占用cpu的情况的。
      

  21.   

    Sleep(0)是正确,用了一定有效的。
    在线程里执行Application.ProcessMessage不可取。
      

  22.   

    或者可以尝试一下 SwitchThread
    一般我用sleep是完全可以的
      

  23.   


    EndTime := GetTickCount() + 100while GetTickCount() < EndTime do
    Application.processMessages;
      

  24.   

    如果是GUI程序,在主线程中不建议sleep,主线程中建议楼上的方法来暂停大约100毫秒。
      

  25.   

    tpIdle    最低的优先级。只有系统处于空闲状态时才执行
    tpLowest  比普通优先级低两级
    tpLower   比普通优先级低一级
    tpNormal  普通的优先级
    tpHigher  比普通优先级高一级
    tpHighest 比普通优先级高两级
    tpTimeCritical 最高的优先级