Delphi实现Singleton模式
点击次数:69 次 发布日期:2008-11-09 08:36:24 作者:源代码网
|
核心代码如下: //timer单元 procedure TService1.Timer_mainTimer(Sender: TObject); var mystringlist:TStringList; SearchRec: TSearchRec; nowtime :string; begin try DateTimeToString(nowtime,"hh:nn",now); if LeftStr(nowtime,4)=LeftStr(GetMSG("GAME","下发时间",theexename ".ini"),4) then begin //创建发送线程 Global_Instance:=TSendThread.getInstance; ////////////// end; except on e: Exception do begin mystringlist:=TStringList.Create; if FileExists(ExtractFilePath(Paramstr(0)) "Err.txt") then mystringlist.LoadFromFile(ExtractFilePath(Paramstr(0)) "Err.txt"); mystringlist.Add("(" DateTimeToStr(Now) ")[创建线程出错:]" E.Message); mystringlist.SaveToFile(ExtractFilePath(Paramstr(0)) "Err.txt"); mystringlist.Free; if FindFirst(ExtractFilePath(Paramstr(0)) "Err.txt", faAnyFile, SearchRec)=0 then begin if SearchRec.Size>5000000 then begin RenameFile(ExtractFilePath(Paramstr(0)) "Err.txt",ansireplacestr(ExtractFilePath(Paramstr(0)) "Err.txt",".txt",FormatDateTime("yyyy-MM-dd hh-mm-ss",now) ".txt")); end; end; end; end; end; //线程单元 unit Unit_Send ; interface uses SysUtils, Classes,StrUtils,main; type TSendThread = class(TThread) public constructor Create(CreateSuspended: Boolean); destructor Destroy; override; class function getInstance:TSendThread; procedure joke; protected procedure Execute; override; end; var Global_Instance:TSendThread; implementation uses DB; class function TSendThread.getInstance:TSendThread; begin if Global_Instance=nil then begin Global_Instance:=TSendThread.Create(false); end; Result:=Global_Instance; end; constructor TSendThread.Create(CreateSuspended: Boolean); begin if Global_Instance=nil then begin inherited Create(CreateSuspended); FreeOnTerminate:=true ; end else raise Exception.CreateFmt("Can not create more than one TSendThread instance!",[SysErrorMessage(0)]); end; destructor TSendThread.Destroy; begin inherited Destroy; end; procedure TSendThread.joke; begin end; procedure TSendThread.Execute; var theuser:TUserInfo; tmpSql:string; begin //执行任务 //处理定时下发 " GameInfo.mainusertable " tmpSql:="select * from " mainusertable " where destroy=0 order by id"; Service1.ADOQuery_send.Connection:=conn_Server; SQLQuery(Service1.ADOQuery_send,tmpSql); while (not Service1.ADOQuery_send.Eof) and (not Terminated) do begin theuser.SeqID:="0"; theuser.UID:=""; theuser.Spc:=GetMSG("PARAMETER","Spcode",theexename ".ini"); theuser.RecordID:="0"; theuser.Mob:=Service1.ADOQuery_send.FieldByname("mobile").AsString; AutoJoke(theuser); Service1.ADOQuery_send.Next; end; Sleep(600001); Global_Instance:=nil; Terminate; //任务完成 end; end. ----------------------------------------- 飘飘何所似?天地一沙鸥。 源代码网推荐 源代码网供稿. |
