bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Delphi 用 Delphi 作 服務 + 多執行緒 的參考程式
查看: 8346|回復: 0
go

用 Delphi 作 服務 + 多執行緒 的參考程式 [複製鏈接]

Rank: 9Rank: 9Rank: 9

1#
發表於 2006-8-4 16:47 |只看該作者 |倒序瀏覽 |打印
  1. unit Unit_main;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr,Dialogs,
  5.   DB, ADODB,iniFiles,Forms,Unit_Import;
  6. type
  7.   TImportDataSVC = class(TService)
  8.     ADOConn: TADOConnection;
  9.     ADOStoredProc: TADOStoredProc;
  10.     procedure ServiceContinue(Sender: TService; var Continued: Boolean);
  11.     procedure ServiceExecute(Sender: TService);
  12.     procedure ServicePause(Sender: TService; var Paused: Boolean);
  13.     procedure ServiceShutdown(Sender: TService);
  14.     procedure ServiceStart(Sender: TService; var Started: Boolean);
  15.     procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  16.   private
  17.     { Private declarations }
  18.   public
  19.     function GetServiceController: TServiceController; override;
  20.     { Public declarations }
  21.   end;

  22. var
  23.   ImportDataSVC: TImportDataSVC;
  24.   ImportThread: TImport;

  25. implementation

  26. uses FunCrypt;

  27. {$R *.DFM}

  28. procedure ServiceController(CtrlCode: DWord); stdcall;
  29. begin
  30.   ImportDataSVC.Controller(CtrlCode);
  31. end;

  32. function TImportDataSVC.GetServiceController: TServiceController;
  33. begin
  34.   Result := ServiceController;
  35. end;

  36. procedure TImportDataSVC.ServiceContinue(Sender: TService; var Continued: Boolean);
  37. begin
  38.   while not Terminated do
  39.   begin
  40.     Sleep(10);
  41.     ServiceThread.ProcessRequests(False);
  42.   end;
  43. end;

  44. procedure TImportDataSVC.ServiceExecute(Sender: TService);
  45. begin
  46.   while not Terminated do
  47.   begin
  48.     Sleep(10);
  49.     ServiceThread.ProcessRequests(False);
  50.   end;
  51. end;

  52. procedure TImportDataSVC.ServicePause(Sender: TService; var Paused: Boolean);
  53. begin
  54.   Paused := True;
  55. end;

  56. procedure TImportDataSVC.ServiceShutdown(Sender: TService);
  57. begin
  58.   Status := csStopped;
  59.   ReportStatus();
  60. end;

  61. procedure TImportDataSVC.ServiceStart(Sender: TService; var Started: Boolean);
  62. var
  63.   MyIniFile: TInifile;
  64.   Pwd, DBConStr, MS_SQLSERVER, MS_SQLUsr, MS_SQLPwd: String;
  65.   OracleParaList: TStringList;
  66. begin
  67.   //服務啟動時,取得資料庫參數
  68.   MyIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Dbsetup.ini');
  69.   OracleParaList.Create;
  70.   MS_SQLSERVER := MyIniFile.ReadString('MS-SQL', 'Server', '');
  71.   MS_SQLUsr    := MyIniFile.ReadString('MS-SQL', 'User', '');
  72.   MS_SQLPwd    := MyIniFile.ReadString('MS-SQL', 'Password', '');
  73.   MS_SQLPwd    := _Crypt(MS_SQLPwd, 65535, false);
  74.   DBConStr := 'Provider=SQLOLEDB.1;Persist Security Info=True;'
  75.     + 'User ID=' + MS_SQLUsr + ';Initial Catalog=GWBNMember;Data Source='
  76.     + MS_SQLSERVER + ';Password=' + MS_SQLPwd;
  77.   OracleParaList.Add(MyIniFile.ReadString('Oracle', 'Server', ''));
  78.   OracleParaList.Add(MyIniFile.ReadString('Oracle', 'User', ''));
  79.   Pwd := MyIniFile.ReadString('Oracle', 'Password', '');
  80.   OracleParaList.Add(_Crypt(Pwd, 65535, false)); //解密密码
  81.   ADOConn.ConnectionString := DBConStr;
  82.   ADOConn.Connected := True;
  83.   ImportThread := TImport.Create(false, ADOConn, OracleParaList);
  84.   Started := True;
  85. end;

  86. procedure TImportDataSVC.ServiceStop(Sender: TService; var Stopped: Boolean);
  87. begin
  88.   Stopped := True;
  89. end;

  90. end.
複製代碼

此處為執行緒程式

  1. unit Unit_Import;
  2. interface
  3. uses
  4.   inifiles, Classes, Sysutils, DB, ADODB, Forms;
  5. type
  6.   TImport = class(TThread)
  7.   private
  8.     FADOConn: TADOConnection;
  9.     FAdoStoredProc: TADOStoredProc;
  10.     { Private declarations }
  11.   protected
  12.     procedure Execute; override;
  13.   public
  14.     constructor Create(Suspended:Boolean; ADOConn:TADOConnection; OracleParaList:TStringList);
  15.   end;
  16.   
  17. implementation
  18. { Import }

  19. constructor TImport.Create(Suspended:Boolean; ADOConn:TADOConnection; OracleParaList:TStringList);
  20. begin
  21.   inherited Create(Suspended);
  22.   FADOConn := ADOConn;
  23.   FAdoStoredProc := TAdoStoredProc.Create(nil);
  24.   FAdoStoredProc.Connection := FADOConn;
  25.   FreeOnTerminate := False;
  26. end;

  27. procedure TImport.Execute;
  28. var
  29.   Hour, Min, Sec, MSec: Word;
  30.   TimeStamp: String;
  31.   MyIniFile: TIniFile;
  32. begin
  33.   { Place thread code here }
  34.   {每次資料匯入執行時間}
  35.   FreeOnTerminate := false;
  36.   MyIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Options.ini');
  37.   TimeStamp := MyIniFile.ReadString('Option', 'ImportTime', '00:00:00');
  38.   while not Terminated do
  39.   begin
  40.     DecodeTime(Time, Hour, Min, Sec, MSec);
  41.     if Trim(TimeStamp) = Format('%-2.2d:%-2.2d', [Hour, Min]) then //如果到匯入數據時間
  42.     begin
  43.       {匯入資料的程式部分}
  44.       Sleep(60000);
  45.     end;
  46.   end;
  47.   MyIniFile.free;
  48. end;

  49. end.
複製代碼
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw
‹ 上一主題|下一主題

Archiver|怕失憶論壇

GMT+8, 2024-5-5 12:55 , Processed in 0.010972 second(s), 10 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.