我做的后台服务程序,不知道为什么,设置为自动启动,重启计算机后,服务为已启动状态,可是并没有执行里面的代码。要停止它再手动启动它才执行
我的代码是1分钟进行一次对数据库的某些运算操作。
用sleep(60000)来实现一分钟执行一次
不知道对不对
出现上诉情况是什么原因?
我的代码是1分钟进行一次对数据库的某些运算操作。
用sleep(60000)来实现一分钟执行一次
不知道对不对
出现上诉情况是什么原因?
是使用线程中的sleep()
还是在TService中加一个TTime呢?比如定时(1次/时)访问数据库或文件
這種才對, 我覺得>>有执行里面的代码。要停止它再手动启动它才执行
正常不會的, 可能是你的代碼處理不對, 貼出來
begin
while not Terminate do
begin
执行代码
...........
sleep(60000);
end;
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;
begin
while not Terminated do
begin
执行代码
...........
sleep(60000);
end;
procedure flux.Execute;
begin
while true do
begin
执行代码
...........
sleep(60000);
end;
重起以后就好使
procedure flux.Execute;
begin
while True do
begin
执行代码
...........
sleep(60000);
end;
那么服务程序就不能手动停止下来了
不能是创建事件。