后台服务程序问题,请各位大侠帮忙!

yinghuafeiwushi 2004-11-08 04:21:22
我做的后台服务程序,不知道为什么,设置为自动启动,重启计算机后,服务为已启动状态,可是并没有执行里面的代码。要停止它再手动启动它才执行
我的代码是1分钟进行一次对数据库的某些运算操作。
用sleep(60000)来实现一分钟执行一次
不知道对不对
出现上诉情况是什么原因?
...全文
141 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonkim 2005-03-31
  • 打赏
  • 举报
回复
不能是ServiceExecute
leonkim 2005-03-31
  • 打赏
  • 举报
回复
我写过,只要事件选择正确就行,比如:停止服务时,放在stop里,启动放在start里。
不能是创建事件。
yinghuafeiwushi 2004-11-11
  • 打赏
  • 举报
回复
谢谢大家伙了
主要是后面那一问,为什么重启以后不执行代码呢?服务程序标识为已启动
anbeel 2004-11-10
  • 打赏
  • 举报
回复
是不是执行代码的问题,改为MessageBeep(0)看看!
yinghuafeiwushi 2004-11-10
  • 打赏
  • 举报
回复
但是如果是
procedure flux.Execute;
begin
while True do
begin
执行代码
...........
sleep(60000);
end;
那么服务程序就不能手动停止下来了
yinghuafeiwushi 2004-11-10
  • 打赏
  • 举报
回复
如果上面的代码改成
procedure flux.Execute;
begin
while true do
begin
执行代码
...........
sleep(60000);
end;
重起以后就好使
yinghuafeiwushi 2004-11-10
  • 打赏
  • 举报
回复
procedure flux.Execute;
begin
while not Terminated do
begin
执行代码
...........
sleep(60000);
end;
beyondtkl 2004-11-10
  • 打赏
  • 举报
回复
看不太出来。。。

用API写更方便。。
yinghuafeiwushi 2004-11-10
  • 打赏
  • 举报
回复
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
fluxService.Controller(CtrlCode);
end;
function TfluxService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TfluxService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
fluxThread1 :=flux.Create(False);
Started := True;
end;
procedure TfluxService.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
fluxThread1.Terminate;
fluxThread1.Free;
Stopped := True;
end;
procedure TfluxService.ServiceShutdown(Sender: TService);
begin
fluxThread1.Terminate;
fluxThread1.Free;
end;
procedure TfluxService.ServicePause(Sender: TService; var Paused: Boolean);
begin
fluxThread1.Suspend;
Paused := True;
end;
procedure TfluxService.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
fluxThread1.Resume;
Continued := True;
end;
yinghuafeiwushi 2004-11-10
  • 打赏
  • 举报
回复
procedure flux.Execute;
begin
while not Terminate do
begin
执行代码
...........
sleep(60000);
end;
QQgenie 2004-11-10
  • 打赏
  • 举报
回复
用sleep(60000)不好,还是timer好
aiirii 2004-11-08
  • 打赏
  • 举报
回复
>>是使用线程中的sleep()
這種才對, 我覺得

>>有执行里面的代码。要停止它再手动启动它才执行
正常不會的, 可能是你的代碼處理不對, 貼出來
[大楚] 2004-11-08
  • 打赏
  • 举报
回复
我也想知道如何做定时执行呢
是使用线程中的sleep()
还是在TService中加一个TTime呢?

比如定时(1次/时)访问数据库或文件
shadowstar 2004-11-08
  • 打赏
  • 举报
回复
放个TTimer不就行了吗?

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧