亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? logshow.pas

?? 自己寫的用delphi封裝東勁板卡api.
?? PAS
字號:
unit LogShow;

interface

uses
  SysUtils, Classes,UnitWriteLogThread,ULogFrm;

type
  TLogShow = class(TComponent)
  private
    { Private declarations }
    LogList : TThreadList ;
    LogThread :TWriteLogThread ;

    function GetLogFileName:Shortstring;
    procedure AddLogToList(Log,LogSource:ShortString;LobLevel:TLogLevel);
    function  GetNextLog:PLogRecord;
    Procedure RemoveLogInList(Log:PLogRecord);
    procedure WriteLogFileAll ;overload;
    function WriteLogFileALL(FileName:ShortString):boolean;overload;

  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create;
    destructor destroy;override;
    function StartWriteLogThread : TWriteLogThread;
    function StopWriteLogThread:boolean;
    procedure MemoryToTxtFile(Mess:pchar; start, pCharLength:integer);
  published
    { Published declarations }
  end;

procedure Register;

implementation

{-------------------------------------------------------------------------------
  過程名:    MemoryToTxtFile
  作者:      fengfan
  日期:      2004.11.10
  說明:      將一段內存以字節的方式保存到文件中,而不管這個字節是否可見。
  參數:      Mess:pchar; start, Length:integer
  返回值:    無
-------------------------------------------------------------------------------}
procedure TLogShow.MemoryToTxtFile(Mess:pchar; start, pCharLength:integer);
var
  ExeName,FileName,ExtName,FilePath:ShortString;
  i:integer;
  MemoryStream :TMemoryStream ;
  FileNameLength :Integer;
begin
  ExtName := ExtractFileExt(Application.ExeName);
  FileName := ExtractFileName(Application.ExeName);
  FileNameLength := Length(FileName)-Length(ExtName) ;
  ExeName := Copy(FileName,1,FileNameLength);
  FilePath := ExtractFilePath(Application.ExeName);
  filename:=FilePath+'log\'+ExeName+formatdatetime('YYYYMMDDHHSSNN',Now);
  i := 0 ;
  while FileExists(FileName) do
  begin
    FileName := FileName + IntToStr(i);
    inc(i);
  end;
  MemoryStream := TMemoryStream.Create ;
  try
    MemoryStream.Write(Mess[Start],pCharLength);
    MemoryStream.SaveToFile(FileName);
  finally
    MemoryStream.free;
  end;
end;

{-------------------------------------------------------------------------------
  過程名:    AddLogToList
  作者:      fengfan
  日期:      2004.07.13
  說明:      將一條日志記錄放入隊列中。
  參數:      Log:shortstring
  20060827 修改
  返回值:    無
-------------------------------------------------------------------------------}
procedure TLogShow.AddLogToList(Log,LogSource:ShortString;LobLevel:TLogLevel);
var
  LogRecord:PLogRecord ;
begin
  new(LogRecord) ;
  FillChar(LogRecord.LogStr[0],sizeof(LogRecord.LogStr),#0);
  StrPCopy(LogRecord.LogStr,Log);
  FillChar(LogRecord.LogSource[0],sizeof(LogRecord.LogSource),#0);
  StrPCopy(LogRecord.LogSource,LogSource);
  LogRecord.LogTime := Now ;
  LogRecord.LogLevel := LogLevel ;
  LogList.Add(LogRecord);
end;

{-------------------------------------------------------------------------------
  過程名:    GetNextLog
  作者:      fengfan
  日期:      2004.07.13
  說明:      取日志隊列中第一條日志記錄
  參數:      無
  返回值:    PLogRecord
-------------------------------------------------------------------------------}
function  TLogShow.GetNextLog :PLogRecord;
var
  vList :TList;
begin
  Result := nil ;
  if not Assigned(LogList) then exit ;
  vList := LogList.LockList ;
  try
    if vList.Count > 0 then
    begin
      Result := PLogRecord(vList.items[0]);
    end
    else
    begin
      Result := nil;
    end;
  finally
    LogList.UnlockList ;
  end;
end;

{-------------------------------------------------------------------------------
  過程名:    RemoveLogInList
  作者:      fengfan
  日期:      2004.07.13
  說明:      從日志隊列中移除一條日志記錄      
  參數:      Log:PLogRecord
  返回值:    無
-------------------------------------------------------------------------------}
Procedure TLogShow.RemoveLogInList(Log:PLogRecord);
begin
  if not Assigned(LogList) then exit ;
  LogList.Remove(Log);
  Dispose(Log);
end;

{-------------------------------------------------------------------------------
  過程名:    GetLogFileName
  作者:      fengfan
  日期:      2004.07.13
  說明:      取得日志文件名 格式為:'路徑'+'文件名'+'日期'+'_log'+'.txt'
  參數:      無
  返回值:    shortstring
-------------------------------------------------------------------------------}
function TLogShow.GetLogFileName: shortstring;
var
  ExeName,FileName,ExtName,FilePath:ShortString;
begin
  ExtName := ExtractFileExt(Application.ExeName);
  FileName := ExtractFileName(Application.ExeName);
  ExeName := Copy(FileName,1,Length(FileName)-Length(ExtName));
  FilePath := ExtractFilePath(Application.ExeName);
  result:=FilePath+'log\'+ExeName+datetostr(date)+'_log.html';
end;

{-------------------------------------------------------------------------------
  過程名:    WriteLogFileAll
  作者:      fengfan
  日期:      2004.07.13
  說明:      一次性將LogList中的文件寫入日志文件,如果日志文件不存在,
             則釋放日志占用內存
  參數:      無
  返回值:    無
-------------------------------------------------------------------------------}
procedure TLogShow.WriteLogFileAll;
var
  FileName:ShortString;
begin
  FileName :=  GetLogFileName ;
  if not WriteLogFileAll(FileName) then
  begin
    FileName := copy(FileName,1,Length(FileName) - 3 ) + 'bak';
    if not WriteLogFileAll(FileName) then
    begin
      ShowMessage('保存日志數據失敗!'+#13+#13+#13+#13+#13+#13+#13+#13);
    end;
  end;
end;

function TLogShow.WriteLogFileALL(FileName:ShortString):boolean;
var
  LogStr:ShortString;
  LogFile :TextFile ;
  LogRecord :PLogRecord ;
  vList : TList ;
  TryNum,FileHanel : integer;
begin

  FileHanel := 0 ;
  if not FileExists(FileName) then
  begin
    FileHanel := FileCreate(FileName);
  end;
  if FileHanel = -1 then
  begin
    vList := LogList.LockList ;
    try
      while vList.Count >0 do
      begin
        LogRecord:= PLogRecord(vList.Items[0]);
        vList.Remove(LogRecord);
        Dispose(LogRecord);
      end;
    finally
      LogList.UnlockList ;
    end;
    Result := true ;
    Exit;
  end
  else
    FileClose(FileHanel);

  AssignFile(LogFile,FileName);
  vList := LogList.LockList ;
  Append(LogFile);
  try
    TryNum := 0 ;
    while vList.Count >0 do
    begin
      LogRecord:= PLogRecord(vList.Items[0]);
      LogStr := (datetimetostr(LogRecord.LogTime)+':'+LogRecord.LogStr) ;
      try
        writeln(LogFile,LogStr);
        vList.Remove(LogRecord);
        Dispose(LogRecord);
        TryNum := 0 ;
      except
        on e:Exception  do
        begin
          AddLogToListA('寫入日志文件失敗!'+e.Message,LogError);
          inc(TryNum);
        end;
      end;
      if TryNum > 10 then
      begin
        Sleep(1000);
        Result := False ;
        exit;
      end;
    end;
  finally
    LogList.UnlockList ;
    CloseFile(LogFile);
  end;
  Result := true ;
end;

{-------------------------------------------------------------------------------
  過程名:    StartWriteLogThread
  作者:      fengfan
  日期:      2004.07.13
  說明:      啟動日志線程
  參數:      memo:TMemo
  返回值:    TWriteLogThread
-------------------------------------------------------------------------------}
function TLogShow.StartWriteLogThread :TWriteLogThread;
begin
  if LogList <> nil then
    //memo.Lines.Add('日志隊列已經建立!')
  else
    LogList := TThreadList.Create ;
  if LogThread <> nil then
  begin
    //memo.Lines.Add('寫日志線程已經存在');
    Result := LogThread;
    exit;
  end;
  LogThread := TWriteLogThread.create(True);
  try
    LogThread.Priority := tpLowest ;
    LogThread.Resume ;
    //AddLogToList('寫日志線程成功啟動!');
    result := LogThread ;
  except
    on e:exception do
    begin
      AddLogToList('寫日志線程啟動失敗,錯誤信息為:'+E.Message);
      Result := Nil;
      exit ;
    end;
  end;
end;

{-------------------------------------------------------------------------------
  過程名:    StopWriteLogThread
  作者:      fengfan
  日期:      2004.07.13
  說明:      停止寫日志線程,并將日志List中沒有寫入日志文件的日志寫入日志文件
  參數:      WriteLogThread :TWriteLogThread
  返回值:    boolean
-------------------------------------------------------------------------------}
function TLogShow.StopWriteLogThread:boolean;
var
  i :integer;
begin
  if Assigned(LogThread) then
  begin
    LogThread.Terminate ;
    i := 0 ;
    while true do
    begin
      sleep(1000);
      if LogThread.Terminated then
      begin
        Sleep(1000);
        FreeAndNil(LogThread);
        break;
      end;
      inc(i);
      if i > 6 then break ;
    end;
  end;

  if Assigned(LogList) then
  begin
    i :=  LogList.LockList.Count;
    LogList.UnlockList;
    if i >0 then WriteLogFileAll ;
    FreeAndNil(LogList);
  end;
  Result := True ;
end;



procedure Register;
begin
  RegisterComponents('Samples', [TLogShow]);
end;

end.
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
hitomi一区二区三区精品| 处破女av一区二区| 国产精品久久久久久久久免费樱桃| 欧美综合色免费| 国产不卡在线视频| 蜜桃久久精品一区二区| 一区二区三区.www| 中文字幕av一区二区三区免费看| 91精品国产91久久综合桃花| 色一情一伦一子一伦一区| 国产福利一区在线| 免费久久99精品国产| 一区二区三区色| 国产精品毛片久久久久久| 精品噜噜噜噜久久久久久久久试看| 在线视频综合导航| 99久久免费视频.com| 国产乱理伦片在线观看夜一区 | 亚洲高清一区二区三区| 国产精品另类一区| 久久久久久日产精品| 日韩欧美一区二区在线视频| 欧美调教femdomvk| 在线看不卡av| 91成人在线观看喷潮| 91色九色蝌蚪| 97久久超碰精品国产| 成人久久久精品乱码一区二区三区| 久久国产精品99久久久久久老狼| 日韩黄色一级片| 亚洲不卡av一区二区三区| 一区二区成人在线| 亚洲最大成人综合| 亚洲一区二区欧美激情| 亚洲精品国产一区二区精华液| 一区精品在线播放| 亚洲欧美日韩小说| 亚洲一区二区成人在线观看| 一区二区三区精品久久久| 亚洲另类春色国产| 亚洲激情图片qvod| 亚洲成人免费视频| 视频一区视频二区中文| 日本午夜精品视频在线观看| 青青草国产精品亚洲专区无| 蜜桃视频一区二区| 国产精品1区2区3区| 国产高清精品在线| 成人av集中营| 色视频一区二区| 欧美网站大全在线观看| 91精品国产高清一区二区三区蜜臀| 欧美高清你懂得| 欧美mv日韩mv国产网站app| 精品国产免费一区二区三区四区 | 国产精品入口麻豆九色| 国产精品入口麻豆九色| 一区二区三区四区激情| 亚洲成av人片一区二区| 美脚の诱脚舐め脚责91| 国产精品一区久久久久| 99精品视频在线播放观看| 欧美亚洲国产一区二区三区va| 欧美精品电影在线播放| 日韩欧美国产麻豆| 国产精品你懂的在线欣赏| 樱桃国产成人精品视频| 日韩电影在线一区二区三区| 国产真实乱子伦精品视频| 成人高清视频在线| 欧美日本国产一区| 国产嫩草影院久久久久| 亚洲精品视频观看| 精品伊人久久久久7777人| av一区二区三区在线| 欧美日韩在线免费视频| 欧美精品一区二区三区蜜臀| 亚洲天堂免费在线观看视频| 午夜激情综合网| 丁香婷婷综合色啪| 欧美日本免费一区二区三区| 国产欧美一二三区| 日韩国产成人精品| 成人黄色a**站在线观看| 欧美高清hd18日本| 欧美国产成人在线| 日韩国产精品久久久久久亚洲| 国产成人一级电影| 欧美日韩国产首页| 国产精品久久久久7777按摩| 天天色天天操综合| av毛片久久久久**hd| 日韩欧美成人激情| 亚洲精品视频自拍| 成人免费电影视频| 欧美大尺度电影在线| 亚洲欧美色一区| 国产v综合v亚洲欧| 欧美一区二区在线播放| 亚洲免费在线电影| 国产盗摄一区二区| 日韩免费一区二区| 午夜在线电影亚洲一区| av一区二区三区四区| 久久久久综合网| 欧美a一区二区| 欧美亚洲一区三区| 国产精品福利影院| 国产在线观看免费一区| 欧美日韩高清一区二区三区| 亚洲男女毛片无遮挡| 国产91精品一区二区| 精品国精品国产| 丝袜诱惑亚洲看片| 欧美在线观看18| 中文字幕亚洲电影| 国产成人免费视频网站高清观看视频 | 国产一区二区三区蝌蚪| 91麻豆精品国产自产在线观看一区| 亚洲精品乱码久久久久久久久 | 欧美日韩综合在线免费观看| 亚洲欧美自拍偷拍色图| 国产成人8x视频一区二区| 精品粉嫩aⅴ一区二区三区四区| 午夜激情久久久| 欧美精选午夜久久久乱码6080| 亚洲综合一二区| 色婷婷国产精品综合在线观看| 中文字幕亚洲电影| 91亚洲精品久久久蜜桃| 亚洲视频在线观看一区| 99视频精品全部免费在线| 中文字幕欧美一| 92国产精品观看| 亚洲女人小视频在线观看| jvid福利写真一区二区三区| 国产精品美女久久久久久2018| 成人av先锋影音| 1024成人网| 在线亚洲免费视频| 午夜国产精品一区| 欧美一区二区精品在线| 在线免费观看日韩欧美| 国产在线精品一区二区| 欧美一级片在线观看| 午夜精品福利一区二区蜜股av| 欧美日韩成人在线一区| 奇米一区二区三区| 精品99久久久久久| 国产成人啪午夜精品网站男同| 久久精品亚洲麻豆av一区二区| 国产91精品一区二区| 成人免费在线视频观看| 91国内精品野花午夜精品| 午夜一区二区三区在线观看| 91精品国产免费| 国产成人午夜99999| 国产精品久久久久久亚洲毛片| 91成人网在线| 青娱乐精品视频在线| 久久久久久久免费视频了| 成人精品视频一区二区三区| 亚洲黄色免费网站| 91精品综合久久久久久| 激情六月婷婷久久| 中文字幕一区二区在线播放| 欧美日韩精品欧美日韩精品| 国模少妇一区二区三区| 亚洲日本一区二区三区| 91精品在线麻豆| 粉嫩在线一区二区三区视频| 一区二区免费看| 26uuu亚洲| 91国偷自产一区二区三区成为亚洲经典| 视频在线观看91| 国产精品久久久久四虎| 欧美日韩成人综合天天影院 | 国产伦精品一区二区三区免费迷| 国产精品女同一区二区三区| 欧美日本在线一区| 成人午夜看片网址| 日韩av一区二| 亚洲人123区| 欧美成人一区二区| 91高清视频在线| 国产成人午夜精品影院观看视频| 亚洲一区二区av在线| 国产欧美日韩麻豆91| 91麻豆精品国产91久久久久久| eeuss鲁片一区二区三区| 蜜桃视频一区二区三区| 亚洲综合色自拍一区| 国产性做久久久久久| 欧美一区二区在线不卡| 在线观看一区日韩| 国产91富婆露脸刺激对白| 日韩精品一级二级| 亚洲精品视频观看| 日本一区二区免费在线| 日韩三级av在线播放|