我做的后台服务程序,不知道为什么,设置为自动启动,重启计算机后,服务为已启动状态,可是并没有执行里面的代码。要停止它再手动启动它才执行
我的代码是1分钟进行一次对数据库的某些运算操作。
用sleep(60000)来实现一分钟执行一次
不知道对不对
出现上诉情况是什么原因?

解决方案 »

  1.   

    我也想知道如何做定时执行呢
    是使用线程中的sleep()
    还是在TService中加一个TTime呢?比如定时(1次/时)访问数据库或文件
      

  2.   

    >>是使用线程中的sleep()
    這種才對, 我覺得>>有执行里面的代码。要停止它再手动启动它才执行
    正常不會的, 可能是你的代碼處理不對, 貼出來
      

  3.   

    procedure flux.Execute;
    begin
      while not Terminate do
      begin
         执行代码
    ...........
         sleep(60000);
      end;
      

  4.   

    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;
      

  5.   

    看不太出来用API写更方便。。
      

  6.   

    procedure flux.Execute;
    begin
      while not Terminated do
      begin
         执行代码
         ...........
         sleep(60000);
      end;
      

  7.   

    如果上面的代码改成
    procedure flux.Execute;
    begin
      while true do
      begin
         执行代码
    ...........
         sleep(60000);
      end;
    重起以后就好使
      

  8.   

    但是如果是
    procedure flux.Execute;
    begin
      while True do
      begin
         执行代码
    ...........
         sleep(60000);
      end;
    那么服务程序就不能手动停止下来了
      

  9.   

    是不是执行代码的问题,改为MessageBeep(0)看看!
      

  10.   

    用sleep(60000)不好,还是timer好
      

  11.   

    我写过,只要事件选择正确就行,比如:停止服务时,放在stop里,启动放在start里。
    不能是创建事件。