我很急需的,我用delphi做的一个服务程序,这个服务程序就是每天晚上12:00的时候,把一个文件夹下的一个文件复制到另一个文件夹里面,并重新命名。
但是,这个服务运行的时候,即便是不到晚上12:00的时候,我看一下任务管理器怎么CPU占用 100%呀,这是怎么回事?如何解决这个问题呀??我想平时就象其他的windows服务一样占用CPU 0%。这个怎么来解决???请高手们帮忙呀!!多谢了!!!

解决方案 »

  1.   

    我的程序代码如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, URLMon, ShellApi,
      ExtCtrls;type
      TWinService = class(TService)
        Timer1: TTimer;
        procedure ServiceExecute(Sender: TService);
        procedure Timer1Timer(Sender: TObject);
        procedure ServiceCreate(Sender: TObject);
      private
        { Private declarations }
        ifrun:Boolean;
        Deststr:string;
      public
        function GetServiceController: TServiceController; override;
        { Public declarations }
      end;var
      WinService: TWinService;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      WinService.Controller(CtrlCode);
    end;function TWinService.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure TWinService.ServiceExecute(Sender: TService);
    begin
      Timer1.Enabled:=true;
      while not Terminated do
        ServiceThread.ProcessRequests(False);
      Timer1.Enabled:=false;
    end;procedure TWinService.Timer1Timer(Sender: TObject);
    begin
       if time='12:00' then
        begin
          CopyFile(PChar('E:\123\123.dat'),PChar(Deststr),false);
        end;
      end;
    end;procedure TWinService.ServiceCreate(Sender: TObject);
    var
      p:PChar;
    begin
      ifrun:=false;
      GetMem(P,255);
      try
        GetSystemDirectory(p,254);
        Deststr:=strpas(p)+'\host.dat';
      finally
        Freemem(p);
      end;
    end;end.
      

  2.   

    procedure TWinService.ServiceExecute(Sender: TService);
    begin
      Timer1.Enabled:=true;
      while not Terminated do
      Begin       //
        ServiceThread.ProcessRequests(False);
        Sleep(1); //
      End;        //
      Timer1.Enabled:=false;
    end;
      

  3.   

    procedure TWinService.ServiceExecute(Sender: TService);
    begin
      Timer1.Enabled:=true;
      while not Terminated do
      Begin       //
        ServiceThread.ProcessRequests(False);
        application.processMessage;
      End;        //
      Timer1.Enabled:=false;
    end;
      

  4.   

    你里面放个timer,当然100%了。用系统的定时器吧。SetTimer
      

  5.   

    procedure TWinService.ServiceExecute(Sender: TService);
    begin
      Timer1.Enabled:=true;
      while not Terminated do
      Begin       //
        ServiceThread.ProcessRequests(False);
        application.processMessage
      End;        //
      Timer1.Enabled:=false;
    end;
    -----------------------------
    application.processMessage;//这个在这里千万不能使用,否则会有预想不到的结果,并且也达不到楼主预期的目的。
      

  6.   

    你里面放个timer,当然100%了。用系统的定时器吧。SetTimer
    --------------------------
    在里面使用Timer跟占用CPU资源无关。
      

  7.   

    那你是说应该是processMessage的问题了?