各位论坛上的朋友,想请教一下,小弟在DELPHI的程序里面调用以下命令
 for i:=1 to 200 do
  begin
   ShellExecute(Handle, nil, 'cmd.exe', pchar('/c  md c:\目录'), nil, SW_HIDE);
  end;
但发现这时CPU占有率达到百分之百,而且执行时间差不多要一分钟左右,有没有办法,在循环调用ShellExecute的时候,可以减低程序对CPU的占用率和减少程序的执行时间,又或者有没有另外一种方式来执行DOS的命令,达到对应的效果,请各位朋友赐教,谢谢!!!

解决方案 »

  1.   

    為什么要用ShellExecute呢?Delphi中有CreateDirectory用來創建文件夾,性能比調用cmd.exe肯定要好,時間也會花費少一些.
    至於減少CPU的占用率,我想衹能是使用線程的sleep方法,因為文件夾操作,本身是系統內核在操作。你可以把這段代碼創建一個線程執行,每執行一次循環,線程睡眠sleep一斷時間,當然這樣一來,實際上運行的時間會更長一些。
      

  2.   

    二楼的大虾,如何把这段代码创建一个线程执行呢?怎样每执行一次循环,线程就sleep一段时间呢?请详细点,谢谢!!!
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ShellAPI;type
      TMyThread=class(TThread)
        protected
          procedure Execute;override;
      end;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      thread:TMyThread;
    begin
      thread:=TMyThread.Create(true);
      thread.FreeOnTerminate:=true;
      thread.Resume;
    end;{ TMyThread }procedure TMyThread.Execute;
    var
      i:integer;
    begin
      inherited;
      while not Terminated do
      begin
        for i:=1 to 200 do
        begin
          //創建目錄,建議不要使用ShellExecute調用cmd.exe
          CreateDirectory('目錄名',nil);
          //ShellExecute(Handle, nil,  'cmd.exe ', pchar( '/c  md c:\目? '), nil, SW_HIDE);
          Sleep(10);    //線程睡眠10秒
        end;
      end;
    end;end.
      

  4.   

    好方法, CreateDirectory('目錄名',nil);很好的方法,受用了