NTPサーバ問い合わせでプログラムがとまってしまう


おさむ  2004-03-25 22:32:52  No: 7906

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;

こんな感じのプログラムです。
よろしくお願いします。


にしの  2004-03-25 22:58:34  No: 7907

「止まる」というのがどういう現象なのか解りませんので、推測です。

Timer1Timerで、すぐに
Timer1.Enabled := False;
にし、Timer1Timerから復帰する前に
Timer1.Enabled := True;
にすれば解消するかもしれません。


おさむ  2004-03-26 01:42:08  No: 7908

IdSNTPのReceiveTimeOutが-2となっていますが、
止まってしまうことと関係ありますか?
そもそも何を設定しているプロパティなのかさえ
よくわかりません。
HELPの説明も読みましたが、経験が浅く理解できませんでした。


にしの  2004-03-26 02:09:20  No: 7909

ReceiveTimeOutが-2というのは、IdTimeoutInfiniteが設定されているからですね。
ヘルプには「無限のタイムアウト値」と書いてありますが、つまりは「接続されるまで待ち続ける」ということでしょう。

蛇足ですが、これだけでは説明不足です。これ以上の回答は難しいと思います。まずは現象を見極めましょう。
# 質問するときには、環境を書く癖をつけておくことをおすすめします


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加