![]() |
INetTime
So hier ist es also nun. Ein kleines Programm um mittels eines Zeitservers aus dem Internet die Systemzeit zu stellen.
Eine Serverliste ist mit in die Ressource einkompiliert und wird beim Start extrahiert, falls nicht vorhanden. Der Benutzer kann sie dann beliebig editieren und erweitern. Unter Win ME und 2000 schon erfolgreich getestet. Unter XP soll es zu erheblichen Performanceproblemen gekommen sein. Es ist nur so, da das "Zeit holen" noch nicht in einem separaten Thread liegt, kann das Programm eventuell einfrieren, wenn es längerdauert die Verbindung zum Server herzustellen. Ach so. Die Server Zeit ist UTC! Das wird aber von Windows beim Stellen der Systemzeit berücksichtigt. Download: ![]() |
Nettes Tool!!! :spin:
Hab XP und es hat einwandfrei getan, bis auf dass das die Sekunden nich genau abgeglichen wurden ... |
Das mit den Sekunden liegt wohl draan, das es etwas verzögert aktualisiert wird. Es muß ja die Verbindung zum Server hergestellt werden, das Signal muß empfangen werden, dann kommt noch mein Timer ins Spiel, ...
|
Hi Luckie,
du hast das gemacht, dass ich bereits vor langem als Tutorial schreiben wollte... Naja, nun zum Programm: Hab ebenfalls XP; läuft problemlos. Nur ruckelt ein wenig. Sonst funktioniert alles. Chris |
Dem vorangegangen war dieser Thread in Auq.de:
![]() |
So neue Version 1.1. Jetzt wird nur die Zeit versucht vom Server zu holen, wenn eine Internetverbindung besteht.
Link siehe erste Posting. |
Was ist wenn meine I-Net Verbindung über ein Netzwerk läuft?
Genau dann funktioniert dein Programm nicht mehr, da es dann nicht richtig erkennt ob ein Rechner online ist oder nicht. Habe die entsprechenden Zeilen auskommentiert. Nun ist mir aufgefallen, dass unter Win2000 zwar einmal die Zeit geholt, aber dann wird der Timer zu oft aufgerufen. Das Programm läuft sich fest ("Keine Rückmeldung .."). Habe darauf hin den Timerwert erhöht von 1sec auf 10sec. Nun läuft das Programm. Allerdings sollte schon beim Ändern des Servers und beim Start des Programmes die Serverzeit geholt werden und nicht erst wenn der Timer so weit ist. Mit der geänderten Version (10sec) muss ich nach dem Programmstart erst 10sec warten, bevor die Zeit abgefragt wird. Ansonsten ein ist es ein gutes Tool :) MfG Hitzi |
Zitat:
Zitat:
|
Einmal holt es auch die Zeit korrekt ab. Aber dann reagiert das Programm nicht mehr und ich kann es nur über Delphi beenden.
Evt. spielt die INet Anbindung und deren Auslastung eine Rolle. Programm verbindet sich mit Server - bekommt die Zeit - disconnected. Vielleicht ist die Zeitspanne die dieser Vorgang braucht bei einigen länger als eine Sekunde. Evt. ist da dein Problem und nicht bei WinXP (wie oben angesprochen). MfG Hitzi |
An der Zeit liegt's doch nicht. Habe probeweise ein Variable working (Boolean) eingefügt. Die war auf True solange die Internettime abgefragt wird und am Ende der Procedure wurde sie wieder auf false gesetzt.
Am Anfang der Function GetINetTime wurde nun diese Variable abgefragt. Bei working=true -> exit. Das half aber auch nichts :( Danach hab ich dein Programm nochmal durch den Debugger gejagt :)
Delphi-Quellcode:
Bei der letzten Codezeile bleibt das Programm hängen. Nie beim ersten Mal!!(?Warum?) Aber auch nicht immer beim zweiten Mal. War unterschiedlich.
if(s <> INVALID_SOCKET) and (hostent <> nil) then
begin ZeroMemory(@saddr,sizeof(TSockAddr)); saddr.sin_addr.S_addr := integer(pointer(hostent^.h_addr_list^)^); saddr.sin_family := PF_INET; saddr.sin_port := htons(37); res := connect(s,saddr,sizeof(TSockAddr)); if(res <> SOCKET_ERROR) then res := recv(s,i,sizeof(i),0); Kannst du da nicht eine Art Timeout einfügen (eine Sekunde auf Antwort warten, ansonsten Fehler - nächster Versuch beim nächsten Timer Ereignis)? MfG Hitzi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz