导航
  • 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

我用delphi做的一个服务程序,怎么运行的时候,占用CPU 100%呀,这是怎么回事?如何解决呀??高手进

喜欢编程朋友 2006-03-06 10:30:26

我很急需的,我用delphi做的一个服务程序,这个服务程序就是每天晚上12:00的时候,把一个文件夹下的一个文件复制到另一个文件夹里面,并重新命名。
但是,这个服务运行的时候,即便是不到晚上12:00的时候,我看一下任务管理器怎么CPU占用 100%呀,这是怎么回事?如何解决这个问题呀??我想平时就象其他的windows服务一样占用CPU 0%。这个怎么来解决???请高手们帮忙呀!!多谢了!!!
...全文
180 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstrose 2006-03-10
那你是说应该是processMessage的问题了?
回复
僵哥 2006-03-08
你里面放个timer,当然100%了。

用系统的定时器吧。SetTimer
--------------------------
在里面使用Timer跟占用CPU资源无关。
回复
僵哥 2006-03-08
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;//这个在这里千万不能使用,否则会有预想不到的结果,并且也达不到楼主预期的目的。
回复
firstrose 2006-03-08
你里面放个timer,当然100%了。

用系统的定时器吧。SetTimer
回复
僵哥 2006-03-07
procedure TWinService.ServiceExecute(Sender: TService);
begin
Timer1.Enabled:=true;
while not Terminated do
Begin //
ServiceThread.ProcessRequests(False);
Sleep(1); //
End; //
Timer1.Enabled:=false;
end;
回复
我的程序代码如下:
unit Unit1;

interface

uses
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.
回复
weyoung 2006-03-07
procedure TWinService.ServiceExecute(Sender: TService);
begin
Timer1.Enabled:=true;
while not Terminated do
Begin //
ServiceThread.ProcessRequests(False);
application.processMessage;
End; //
Timer1.Enabled:=false;
end;
回复
僵哥 2006-03-06
看你的程序吧.
回复
发动态
发帖子
Delphi
创建于2007-08-02

4802

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告