小弟写了三个线程 其中因为需要延时用了sleep函数 可是程序老死 不响应 我就自己写了个sleep函数
procedure sleepx(ms:Integer);
var
staretime:TDateTime;
begin
  staretime:=Now();
  while MilliSecondsBetween(staretime,Now())<ms do
   begin
    Application.ProcessMessages();
   end;
  
end;
用来延时  可是cpu的占用率却一直高居不下 求解决的问题! 谢谢!
ps:延时是必须的

解决方案 »

  1.   

    procedure sleepx(ms:Integer); 
    var 
    staretime:TDateTime; 
    begin 
      staretime:=Now(); 
      while MilliSecondsBetween(staretime,Now()) <ms do 
      begin 
        Application.ProcessMessages();
        Sleep(0); 
      end; 
      
    end; 
      

  2.   

    看来换cpu是种办法,
    多核编程
      

  3.   

    没有sleep,是cpu全部用于检查时间和事件分发,如果没有其它进程需要cpu,它就全部占用了——虽然每个循环里,检查时间和事件分发占的cpu其实很短,但是循环也很快就结束,进入下一个循环有sleep,cpu全部用于检查时间和事件分发和进入idle、离开idle,我一般是sleep(50),每个循环里,检查时间和事件分发占的cpu其实很短,相对于50ms,可以忽略不计
      

  4.   

    不要用Sleep,Sleep会阻塞CPU执行
      

  5.   

    单线程的时候,很容易出现CPU满的情况,多线程了会好一些,似乎
      

  6.   


    for
    sleep(1)
    Application.ProcessMessages
      

  7.   

    procedure A.execute; 
    begin 
      while not Terminated do 
      begin 
        Synchronize(AA); 
        sleepx(1000); 
      end; 
    end; 
    procedure A.AA 
    BEGIN 
                fun(@KK,@id,True); 
                sleepx(3000); 
                fun(@GG,@ID,False); 
                sleepx(1000); 
                BB(); 
                sleepx(1000); 
                fun(@LL,@ID,False); 
                sleepx(1000); 
    END 
    这个是线程之一 另外两个也是类似的 程序老假死.... 
    procedure sleepx(ms:Integer); 
    var 
    staretime:TDateTime; 
    begin 
      staretime:=Now(); 
      while MilliSecondsBetween(staretime,Now()) <ms do 
      begin 
          Sleep(0); 
          Application.ProcessMessages(); 
      end; 
    end; 
      

  8.   

    在线程里,直接sleep就行了,不要用application.ProcessMessages,
    虽然本线程被sleep塞住了,但是别的线程可以继续运行
      

  9.   

    主线程里不要长时间sleep;Synchronize的函数是在主线程里运行。
      

  10.   

    他是在说你费劲建了线程,然后用Synchronize把线程给废了。
      

  11.   

    可是我不用Synchronize 线程循环的过快 我的线程函数aa一次还没搞完就又来一次 我想让他一次一次的运行 可是我不知道怎么让他一次运行完再运行下一次 能告诉我怎么一次运行函数完之后再运行么? 谢谢!
      

  12.   

    你的AA也是本线程的一个方法,就不必用synchronize了。