IdSNTPを使ってNTPサーバにアクセスしてPC's Clockの
時刻あわせをしているプログラムですが、
どうしても途中で止まってしまいます。
書き方が悪いのでしょうか?
初期値 SyncTimeCounter := 0;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc( SyncTimeCounter );
if SyncTimeCounter >= 60 then begin
IdSNTP1.Active := True;
SyncroPCClock(Sender);
IdSNTP1.Active := False;
SyncTimeCounter := 0;
end;
end;
procedure TForm1.SyncroPCClock(Sender: TObject);
var
SyncroOK : Boolean;
begin
WriteLogMsg := '';
if not IdSNTP1.Active then
begin
WriteLogMsg := DateTimeToStr(Now) + ' IdSNTP Not Active...';
exit;
end;
try
IdSNTP1.Host := NTPHost;
IdSNTP1.Port := NTPPort;
SyncroOK := IdSNTP1.SyncTime;
if SyncroOK then WriteLogMsg := DateTimeToStr(Now) + ' SyncTime Sucsess...'
else WriteLogMsg := DateTimeToStr(Now) + ' SyncTime Failure...';
except
WriteLogMsg := DateTimeToStr(Now) + ' ERROR : Check the LAN or Router 123 Port Open...';
exit;
end;
end;
こんな感じのプログラムです。
よろしくお願いします。
「止まる」というのがどういう現象なのか解りませんので、推測です。
Timer1Timerで、すぐに
Timer1.Enabled := False;
にし、Timer1Timerから復帰する前に
Timer1.Enabled := True;
にすれば解消するかもしれません。
IdSNTPのReceiveTimeOutが-2となっていますが、
止まってしまうことと関係ありますか?
そもそも何を設定しているプロパティなのかさえ
よくわかりません。
HELPの説明も読みましたが、経験が浅く理解できませんでした。
ReceiveTimeOutが-2というのは、IdTimeoutInfiniteが設定されているからですね。
ヘルプには「無限のタイムアウト値」と書いてありますが、つまりは「接続されるまで待ち続ける」ということでしょう。
蛇足ですが、これだけでは説明不足です。これ以上の回答は難しいと思います。まずは現象を見極めましょう。
# 質問するときには、環境を書く癖をつけておくことをおすすめします
ツイート | ![]() |