问题代码如下:
  with aDataSet do
  begin
    DisableControls;
    bmk := GetBook;
    try
      First;
      while not eof do
      begin
        DoSomeThing();
        Next;
        Application.ProcessMessages;  //主管说这句代码是废话,可以除去。
      end;
    finally
      if BookValid(bmk) then
        GotoBook(bmk);
      EnableControls;
    end;
  end;
首先声明一下,主管D的水平是很高的,他的话可能有道理。小弟对VCL研究得不是非常透,只是认为Application.ProcessMessages可以使其他的代码也可以消息循环起来这样这段代码的CPU占用不会很高,但是在DisableControls的前提下,Application.ProcessMessages是否真的没用了?如果是的话,为什么?谢谢各位老大!

解决方案 »

  1.   

    在DisableControls的情况下,其它组件是接受不到消息的...
      

  2.   

    DisableControls好像是断开了与数据显示控件的联系,在循环中加Application.ProcessMessages是可以防止其他控件没响应,但cup还是很高,想降低cpu使用率,建议使用线程实现循环
      

  3.   

    在DisableControls的情况下,其它组件是接受不到消息的...------------------->学习
      

  4.   

    DisableControls好像是断开了与数据显示控件的联系
    ///////////
    同意
      

  5.   

    “在DisableControls的情况下,其它组件是接受不到消息的...”,严重怀疑中,至少太笼统了吧,最多也就是接收不到该DataSet的消息,呵呵。
        而对于Application.ProcessMessages这句话,当然也是有用的,算不上废话,不过具体效果要结合你的程序来分析,如果业务处理比较简单,不用也无所谓,但如果比较复杂的话,处理大量数据时,当然要用ProcessMessages。
      

  6.   

    小卢
    DisableControls好像是断开了与数据显示控件的联系,在循环中加Application.ProcessMessages是可以防止其他控件没响应,但cup还是很高,想降低cpu使用率,建议使用线程实现循环
    >>>>应该有道理
      

  7.   

    在循环中加Application.ProcessMessages是可以防止其他控件没响应。。就是这样,我也常用到。。
      

  8.   

    在使用线程的时候我也喜欢用Application.ProcessMessages代替sleep(n),不知道这个习惯好不好(当然,在Application.ProcessMessages可以使用的场合).各位大侠可以讨论一下Application.ProcessMessages和sleep(n)哪个效率高.
      

  9.   

    问大侠们:Application.ProcessMessages可以降低CPU的消耗吗?
      

  10.   

    Application.ProcessMessages
    相当与暂时放弃CPU,让别的程序抢占CPU,
      

  11.   

    Application.ProcessMessages
    我理解的是移交控制权,一般我在大的while循环中使用:Query1.First;
    //检查销户记录
    while not Query1.Eof do
    begin
    i:=i+1;
    application.ProcessMessages;
    没有在DisableControls使用过
      

  12.   

    http://www.codesky.net/showcode.asp?uid=74053