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

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

?? nettimecommon.pas

?? VC++實現的時間同步程序
?? PAS
字號:
unit NetTimeCommon;

interface

uses Windows, Messages, Classes, SysUtils;

const
  RFC868_Port = 37;
  NTP_Port = 123;
  MaxServers = 5;
  MaxServerList = 1000;
  MagicCookie = $1A34450B;
  ProtocolVersion = 4;
  ms = 1.0 / (24 * 60 * 60 * 1000);
  IPCSleepTime = 10;
  GUISleepTime = 100;
  PollSleepTime = 1000;

type

  TTimeProto = (ttpNTP, ttpRFC868_TCP, ttpRFC868_UDP);

  TServerDef = record
    hostname: Shortstring;
    protocol: TTimeProto;
    Port: integer;
  end;

  TServerDefArray = array[0..MaxServers-1] of TServerDef;

  TServerConfigBlock = record
    ServerCount: integer;
    Servers: TServerDefArray;
    SyncFreq: integer;
    LostSync: integer;
    WarnAdj: integer;
    Retry: integer;
    Protocol: TTimeProto;
  end;

  TWarnAdjEvent = function(const Sender: TObject;
    const ServerTime, StationTime: TDateTime): boolean of object;

  TSyncServerStatus = (ssGood, ssFailed, ssWrong, ssUnconfigured);
  TSyncStatus = record
    Synchronized: boolean;
    ss: array[0..MaxServers-1] of TSyncServerStatus;
  end;

  TNetTimeServerBase = class
  public
    function GetActive: boolean; virtual; abstract;
    function GetStatus: TSyncStatus; virtual; abstract;
    function GetSynchronized: boolean; virtual;
    function GetLastUpdateTime: TDateTime; virtual; abstract;
    function GetStateChange: TNotifyEvent; virtual; abstract;
    procedure SetStateChange(const sc: TNotifyEvent); virtual; abstract;
    function GetWarnAdj: TWarnAdjEvent; virtual; abstract;
    procedure SetWarnAdj(const wa: TWarnAdjEvent); virtual; abstract;
    function GetOnExit: TNotifyEvent; virtual; abstract;
    procedure SetOnExit(const ex: TNotifyEvent); virtual; abstract;
    function GetServer: boolean; virtual; abstract;
    procedure SetServer(const sv: boolean); virtual; abstract;
    procedure SetConfig(const cfg: TServerConfigBlock); virtual; abstract;
    function GetConfig: TServerConfigBlock; virtual; abstract;
    procedure ForceUpdate; virtual; abstract; // forces a CONFIGURATION update
    function UpdateNow: boolean; virtual; abstract; // forces a TIME update
    procedure KillEverything; virtual; abstract;
    property Active: boolean read GetActive;
    property Status: TSyncStatus read GetStatus;
    property LastUpdateTime: TDateTime read GetLastUpdateTime;
    property OnStateChange: TNotifyEvent read GetStateChange write SetStateChange;
    property OnWarnAdj: TWarnAdjEvent read GetWarnAdj write SetWarnAdj;
    property OnExitNow: TNotifyEvent read GetOnExit write SetOnExit;
    property Server: boolean read GetServer write SetServer;
    property Config: TServerConfigBlock read GetConfig write SetConfig;
  end;

  EServerRunning = class(Exception)
  end;

const
  DefaultSyncFreq = 600;
  DefaultLostSync = 7500;
  DefaultRetry = 600;
  DefaultWarnAdj = 120;
  DefaultProtocol = ttpNTP;

  ExNameUI = 'NetTimeGHJM_UI';
  ExNameServer = 'NetTimeGHJM_Server';

type
  TServerData = record
    Host: ShortString;
    Time: TDateTime;
    NetLag: TDateTime;
    RetrievalTime: TDateTime;
    Status: TSyncServerStatus;
    Done: boolean;
  end;
  TServerDataArray = array[0..MaxServerList-1] of TServerData;
  PServerDataArray = ^TServerDataArray;
  TServerDataSort = (sdsByTime, sdsByNetlag);

procedure SortServerData(const Arr: PServerDataArray; const Count: integer;
  const WhichSort: TServerDataSort; const Ascending: boolean);
procedure NormalizeTimes(const Arr: PServerDataArray; const Count: integer);

function DefaultPortForProtocol(const Proto: TTimeProto): integer;
function WinExecAndWait(Path: PChar; Visibility: Word): integer;

implementation

function DefaultPortForProtocol(const Proto: TTimeProto): integer;
begin
  case Proto of
    ttpRFC868_UDP, ttpRFC868_TCP: result := RFC868_Port;
    ttpNTP: result := NTP_Port;
  else
    result := 0;
  end;
end;

function WinExecAndWait(Path: PChar; Visibility: Word): integer;

var
  Msg: TMsg;
  lpExitCode: cardinal;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;

begin
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  with StartupInfo do
  begin
    cb := SizeOf(TStartupInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    wShowWindow := visibility;
  end;
  if CreateProcess(nil, path, nil, nil, False, NORMAL_PRIORITY_CLASS, nil,
    nil, StartupInfo, ProcessInfo) then
    begin
      repeat
        while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
          begin
            if Msg.Message = wm_Quit then Halt(Msg.WParam);
            TranslateMessage(Msg);
            DispatchMessage(Msg);
          end;
        GetExitCodeProcess(ProcessInfo.hProcess,lpExitCode);
      until lpExitCode <> Still_Active;
      with ProcessInfo do
        begin
          CloseHandle(hThread);
          CloseHandle(hProcess);
        end;
      Result := 0;
    end
  else
    Result := GetLastError;
end;

procedure NormalizeTimes(const Arr: PServerDataArray; const Count: integer);

var
  CalcNow: TDateTime;
  i: integer;

begin
  if Count = 0 then
    raise exception.create('Cannot normalize a list of zero length');
  CalcNow := Now;
  for i := 0 to Count-1 do
    Arr[i].Time := Arr[i].Time + (CalcNow - Arr[i].RetrievalTime);
end;

procedure SortServerData(const Arr: PServerDataArray; const Count: integer;
  const WhichSort: TServerDataSort; const Ascending: boolean);

var
  done: boolean;
  i: integer;
  OutOfOrder: boolean;
  TmpData: TServerData;

begin
  repeat
    done := true;
    for i := 0 to Count-2 do
      begin
        if Ascending then
          if WhichSort = sdsByTime then
            OutOfOrder := Arr[i].Time > Arr[i+1].Time
          else
            OutOfOrder := Arr[i].NetLag > Arr[i+1].NetLag
        else
          if WhichSort = sdsByTime then
            OutOfOrder := Arr[i+1].Time > Arr[i].Time
          else
            OutOfOrder := Arr[i+1].NetLag > Arr[i].NetLag;
        if OutOfOrder then
          begin
            TmpData := Arr[i];
            Arr[i] := Arr[i+1];
            Arr[i+1] := TmpData;
            done := false;
          end;
      end;
  until done;
end;

function TNetTimeServerBase.GetSynchronized: boolean;
begin
  result := GetStatus.Synchronized;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久1区2区| 国产亚洲成av人在线观看导航| 欧美一二三四在线| 国产精品天美传媒| 全国精品久久少妇| 日本大香伊一区二区三区| 久久久久久久综合| 天天操天天综合网| 91成人在线免费观看| 中文一区二区在线观看| 久久国产人妖系列| 欧美日韩免费观看一区二区三区| 国产精品天美传媒沈樵| 国产原创一区二区| 欧美成人一区二区三区| 亚洲成av人综合在线观看| av一区二区三区| 国产色婷婷亚洲99精品小说| 久久精品国产99久久6| 欧美日本高清视频在线观看| 蜜臀精品一区二区三区在线观看| 99这里只有久久精品视频| 中文子幕无线码一区tr| 国产一区二区视频在线| 欧美刺激脚交jootjob| 美女任你摸久久| 欧美一区二区三区小说| 图片区小说区区亚洲影院| 欧美日韩一区二区三区高清| 亚洲最大成人综合| 在线免费观看日本欧美| 亚洲一区二区3| 欧美在线啊v一区| 亚洲一级片在线观看| 在线视频国内自拍亚洲视频| 亚洲欧美另类在线| 色爱区综合激月婷婷| 一区二区三区精品视频在线| 欧美私人免费视频| 午夜精品久久久久久久蜜桃app| 欧美性色黄大片手机版| 亚洲国产精品嫩草影院| 欧美精品色一区二区三区| 男女男精品视频| 精品免费99久久| 处破女av一区二区| 亚洲精品一二三区| 欧美日韩国产综合久久| 秋霞影院一区二区| 精品久久久久一区二区国产| 国产精一品亚洲二区在线视频| 国产婷婷色一区二区三区四区 | 午夜精品久久久久久久蜜桃app| 欧美在线观看一区二区| 日韩专区在线视频| 26uuu精品一区二区在线观看| 国产乱妇无码大片在线观看| 自拍偷拍国产亚洲| 欧美高清性hdvideosex| 韩日精品视频一区| 成人免费在线视频| 91精品麻豆日日躁夜夜躁| 国模一区二区三区白浆| 亚洲人妖av一区二区| 精品视频123区在线观看| 极品尤物av久久免费看| 中文字幕一区不卡| 欧美一区二区女人| 99久久久国产精品免费蜜臀| 天天综合天天做天天综合| 久久精品视频免费观看| 欧美午夜宅男影院| 成人一区二区视频| 日本午夜精品一区二区三区电影| 欧美国产激情一区二区三区蜜月| 在线观看av一区二区| 国产精品资源网站| 亚洲国产欧美一区二区三区丁香婷| 精品免费视频一区二区| 色国产精品一区在线观看| 九色porny丨国产精品| 亚洲自拍另类综合| 欧美激情一区二区在线| 精品人在线二区三区| 91视频免费观看| 国产乱人伦偷精品视频不卡| 日精品一区二区| 亚洲精品乱码久久久久久久久 | 欧洲精品在线观看| 国产酒店精品激情| 日韩中文字幕av电影| 亚洲视频精选在线| 久久精品一区二区三区不卡| 6080国产精品一区二区| 欧美自拍偷拍一区| 99精品视频免费在线观看| 韩国女主播一区| 天堂蜜桃91精品| 亚洲网友自拍偷拍| 亚洲精品视频观看| 日韩一区欧美小说| 国产精品乱码妇女bbbb| 久久久久88色偷偷免费| 日韩精品综合一本久道在线视频| 欧美日韩色综合| 欧美性xxxxxx少妇| 色悠久久久久综合欧美99| av在线一区二区三区| 不卡的av电影| 91亚洲大成网污www| 高清免费成人av| 国产白丝精品91爽爽久久| 国产高清在线观看免费不卡| 国产精品一品二品| 国产.欧美.日韩| 成人激情小说乱人伦| 不卡一区二区三区四区| av中文字幕不卡| 在线日韩一区二区| 欧美性感一类影片在线播放| 欧美午夜寂寞影院| 欧美一区二区三区思思人| 欧美不卡视频一区| 国产亚洲污的网站| 国产精品久久二区二区| 亚洲欧美日韩国产手机在线| 亚洲精品亚洲人成人网| 亚洲国产你懂的| 日韩av电影天堂| 精品一区二区三区免费播放| 国模一区二区三区白浆| 春色校园综合激情亚洲| 99re6这里只有精品视频在线观看| 97久久人人超碰| 欧美视频日韩视频| 日韩欧美高清一区| 中文字幕在线免费不卡| 亚洲综合丁香婷婷六月香| 日韩精品国产欧美| 韩国女主播成人在线观看| 99久久婷婷国产精品综合| 欧美日韩一区二区在线观看视频| 91精品国产综合久久香蕉的特点 | 国产精品888| 色综合天天天天做夜夜夜夜做| 欧美网站一区二区| 日韩欧美在线不卡| 国产精品福利一区| 天天爽夜夜爽夜夜爽精品视频| 欧美一级片免费看| 日本欧美久久久久免费播放网| 99久久99久久精品免费观看 | 狠狠色综合播放一区二区| 国产一区二区久久| 91丨九色丨国产丨porny| 国产在线播放一区三区四| 99精品在线免费| 中文子幕无线码一区tr| 国产99精品国产| 国产日韩欧美a| 成人国产精品免费观看动漫| 国产亚洲福利社区一区| 国产精品一区二区免费不卡| 久久只精品国产| 国产一区二区在线视频| 日韩欧美在线123| 久久精品国产第一区二区三区| 欧美一区二区大片| 久久激五月天综合精品| 日韩精品中午字幕| 久久爱www久久做| 精品久久久久久综合日本欧美| 久久激情综合网| 久久久久久亚洲综合影院红桃| 国产激情精品久久久第一区二区| 久久精品视频一区二区三区| 国产激情视频一区二区在线观看| 国产欧美日韩精品在线| 成人av中文字幕| 亚洲精品乱码久久久久久黑人| 欧美色网站导航| 免费成人在线播放| 久久一区二区视频| hitomi一区二区三区精品| 亚洲激情中文1区| 欧美一区二区三区四区五区| 韩国成人精品a∨在线观看| 国产欧美日韩亚州综合| 91亚洲永久精品| 日韩精品福利网| 欧美激情一区三区| 欧美天天综合网| 狠狠狠色丁香婷婷综合激情| 国产精品久久综合| 欧美性猛交xxxxxx富婆| 精品一区二区三区免费视频| 国产精品久久久久久久岛一牛影视 | 日韩一区二区免费高清| 国产一区二区三区久久久| 亚洲欧洲成人自拍|