while true do Application.ProcessMessages;这句话可以让CPU处于很高的占用率,但是程序不卡
不知道对系统中其他运行的程序是否能造成不良影响?

解决方案 »

  1.   

    while true do
    begin
      sleep(50);
      Application.ProcessMessages;
    end;就不会影响别的程序了 
      

  2.   

    Application.ProcessMessages;
    他只不过是让你运行的程序暂停一下
    来处理一下消息列表里的其他消息
    处理完后再回到你的程序段这样会造成CPU占用率很高,因为这个函数同样是让你的程序去处理其它函数了
    而不是让程序把所有的工作都暂停
    如果想减低CPU占用率,可加个Sleep(1);如果CPU占用率是太高的话不会对其他程序造成影响
      

  3.   

    看Application.ProcessMessages的源码 程序是检索到一个消息就处理一个消息当然不会卡了 但是由于不停的在检索 所以CPU占用率很高function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
    var
      Handled: Boolean;
    begin
      Result := False;
      if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
      begin
        Result := True;
        if Msg.Message <> WM_QUIT then
        begin
          Handled := False;
          if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
          if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
            not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
          begin
            TranslateMessage(Msg);
            DispatchMessage(Msg);
          end;
        end
        else
          FTerminate := True;
      end;
    end;procedure TApplication.ProcessMessages;
    var
      Msg: TMsg;
    begin
      while ProcessMessage(Msg) do {loop};
    end;
      

  4.   


    我加了Sleep(1)的,不过会影响代码执行效率,代码执行事件变长很多
      

  5.   

    其实我想问的是CPU占用率,是否会对其他程序造成影响
      

  6.   

    你是啥程序非要占满cpu才能正常运行啊?gui的响应时间都是以windows分配的时间片为单位的,十几毫秒一次。非要跑上100%的才能话你就应该重新设计你的程序,反正这种让人觉得中毒了的程序我是肯定不会用的
      

  7.   

    晕,我只是单纯的问问这样是否会影响其他程序,CPU占用也没有100%,都是50%左右
      

  8.   

    废话,双核cpu跑满一个core当然50%了
    跑满cpu还不影响别的程序那啥叫影响?
      

  9.   

    不管什么情况下,CPU使用高应该都会影响所有程序吧。