• Delphi 编写系统服务(服务控制线程:开始,暂停,继续,停止)


           打开Delphi 7,新建,选择Other->Service Application 修改属性中Name和DisplayName,Name是Service的名称,决定着进程的标识,DisplayName是显示在操作系统里的服务面板里的服务的名称。例如我们将Name修改为NoticeService。

          新建一个类,例如名字叫做TNoticeThread,继承自TThread,并重写protected过程Execute。在NoticeService的类定义中添加一个NoticeThread对象。

          找到属性的Events选项卡,分别添加OnStart,OnPause,OnContinue,OnStop事件,用这几个事件来控制NoticeThread线程的运行:

          代码如下:

    [delphi] view plain copy
     
     print?
    1. unit ufrmMain;  
    2.   
    3. interface  
    4.   
    5. uses  
    6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;  
    7.   
    8. type  
    9.   TNoticeThread = class(TThread)  
    10.   private  
    11.   
    12.   protected  
    13.     procedure Execute; override;  
    14.   end;  
    15.   
    16. type  
    17.   TNoticeService = class(TService)  
    18.     procedure ServiceStart(Sender: TService; var Started: Boolean);  
    19.     procedure ServiceStop(Sender: TService; var Stopped: Boolean);  
    20.     procedure ServicePause(Sender: TService; var Paused: Boolean);  
    21.     procedure ServiceContinue(Sender: TService; var Continued: Boolean);  
    22.   private  
    23.     NoticeThread: TNoticeThread;  
    24.   public  
    25.     function GetServiceController: TServiceController; override;   
    26.   end;  
    27.   
    28. var  
    29.   NoticeService: TNoticeService;  
    30.   
    31. implementation  
    32.   
    33. {$R *.DFM}  
    34.   
    35. procedure ServiceController(CtrlCode: DWord); stdcall;  
    36. begin  
    37.   NoticeService.Controller(CtrlCode);  
    38. end;  
    39.   
    40. function TNoticeService.GetServiceController: TServiceController;  
    41. begin  
    42.   Result := ServiceController;  
    43. end;  
    44.   
    45. procedure TNoticeService.ServiceStart(Sender: TService;  
    46.   var Started: Boolean);  
    47. begin  
    48.   NoticeThread := TNoticeThread.Create(False);  
    49.   Started := True;  
    50. end;  
    51.   
    52. procedure TNoticeService.ServiceStop(Sender: TService;  
    53.   var Stopped: Boolean);  
    54. begin  
    55.   NoticeThread.Terminate;  
    56.   Stopped := True;  
    57. end;  
    58.   
    59. procedure TNoticeService.ServicePause(Sender: TService;  
    60.   var Paused: Boolean);  
    61. begin  
    62.   NoticeThread.Suspend;  
    63.   Paused := True;  
    64. end;  
    65.   
    66. procedure TNoticeService.ServiceContinue(Sender: TService;  
    67.   var Continued: Boolean);  
    68. begin  
    69.   NoticeThread.Resume;  
    70.   Continued := True;  
    71. end;  
    72.   
    73. { TNoticeThread }  
    74.   
    75. procedure TNoticeThread.Execute;  
    76. begin  
    77.   inherited;  
    78.   
    79. end;  
    80.   
    81. end.  

    http://blog.csdn.net/yanjiaye520/article/details/7794550

  • 相关阅读:
    cs硕士妹子找工作经历【阿里人搜等互联网】
    EJB到底是什么,真的那么神秘吗??
    到底EJB是什么
    安全性测试:
    掌握 Promise 的逻辑方法
    VS2019 不能下载的解决办法
    Java8基础系列-Stream
    周期模型(典型的几种):
    软件生存周期及其模型是什么?
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
  • 原文地址:https://www.cnblogs.com/findumars/p/5090498.html
Copyright © 2020-2023  润新知