写了个服务
为什么电脑关机关不了机了啊
必须停掉我写的才可以关的该怎么解决呢

解决方案 »

  1.   

    是不是Service线程的Execute当中有死循环之类的?如果有则加以判断服务线程是否得到终止信号,即Terminated。否则在服务的OnShutDown当中把你的主窗体执行关闭操作(如果是有主窗体的话)。
      

  2.   

    sleep的时间不要太长在循环中间加上:
    ServiceThread.ProcessRequests(False);在ServiceExecute运行出错以及运行完成时
    调用一下Self.ReportStatus,报告服务状态
      

  3.   

    还是没有解决呀我的服务的代码
    主窗体没什么的
    呵呵
    {==========}
    procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      TimeServer.Controller(CtrlCode);
    end;function TTimeServer.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure TTimeServer.ServiceContinue(Sender: TService;
      var Continued: Boolean);
    begin
      while not Terminated do
      begin
        Sleep(10);
        ServiceThread.ProcessRequests(False);
      end;
    end;
    procedure TTimeServer.ServiceExecute(Sender: TService);
    begin
      while not Terminated do
      begin
          Sleep(10);
          ServiceThread.ProcessRequests(False);
      end;
    end;
    procedure TTimeServer.ServicePause(Sender: TService; var Paused: Boolean);
    begin
      Paused := True;
    end;procedure TTimeServer.ServiceShutdown(Sender: TService);
    begin
      gbCanClose := true;
      FrmMain.Free;
      Status := csStopped;
      ReportStatus();
    end;
    procedure TTimeServer.ServiceStart(Sender: TService; var Started: Boolean);
    begin
      Started := True;
      Svcmgr.Application.CreateForm(TFrmMain, FrmMain);
      gbCanClose := False;
      FrmMain.Hide;
    end;
    procedure TTimeServer.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
      Stopped := True;
      gbCanClose := True;
      FrmMain.Free;
    end;
      

  4.   

    procedure TTimeServer.ServiceStart(Sender: TService; var Started: Boolean);
    begin
      Started := True;
      Svcmgr.Application.CreateForm(TFrmMain, FrmMain);
      gbCanClose := False;
      FrmMain.Hide;
    end;
    procedure TTimeServer.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
      Stopped := True;
      gbCanClose := True;
      FrmMain.Free;
    end;
    gbCanClose 的问题吧
      

  5.   

    貌似这里有问题,
    当你暂停一个服务时,是把服务线程挂起,
    Continue是从上次暂停处接着执行,
    在Continue里启动一个死循环反而会影响到ServiceExecute的执行
    procedure TTimeServer.ServiceContinue(Sender: TService;
      var Continued: Boolean);
    begin
      while not Terminated do
      begin
        Sleep(10);
        ServiceThread.ProcessRequests(False);
      end;
    end;
      

  6.   

    ServiceContinue里把循环删掉
    ==========按照你的说法改了
    可是启动服务后
    关机还是关不掉
    真郁闷
      

  7.   

    实在看不出毛病了
    那就只好把代码一段一段注释掉,
    然后一段一段加上,Build... 重启....
    直到找到问题所在.......别忘了在设计时把Interactive属性设成True
      

  8.   

    你的服务代码应该没什么问题
    应该是你主窗体代码有问题
    贴出来see see
    :)