Systemuhr in C++ einbeziehen

Gast #386025
Lesenswert?

Hallo!!

Bin ein C++ Neuling und verwende den C++ Builder6. Ich möchte ein
Programm schreiben mit dem es möglich ist mehrere Fernwirkgeräte über
Ethernet zu synchronisieren. Ich hätte ein Bild eingefügt um zu zeigen
wie ich mir das vorstelle.

Neben dem Text Uhrzeit sollte die Systemuhr eines Servers laufen bis in
den 10ms bereich. Dann würde ich gerne den BUtton Sync starten drücken
und alle angeschlossenen Geräte übernehmen diese Zeit.

Wie bekomm ich die Systemuhr und wie kann ich dies über Ethernet
schicken???
Angehängte Dateien:
Persönliche Seite #386027
Lesenswert?

Unter Windows kann die Systemzeit mit der Funktion GetSystemTime bzw.
GetLocalSystemTime abgefragt werden.

Der Funktion muss ein Pointer auf eine Struktur vom Typ SYSTEM_TIME
übergeben werden, in die Zeitbestandteile aufgeschlüsselt sind.

GetSystemTime liefert UTC/GMT, GetLocalSystemTime berücksichtigt die
eingestellte Zeitzone.

Ansonsten kannst Du Dir ja auch mal das (S)NTP-Protokoll ansehen; das
Rad muss man ja nicht jedesmal neu erfinden, wenn man dran drehen will.
Gast #386029
Lesenswert?

Eine kleine Bettlektüre zum Thema Uhrensynchronisation:

http://klever.fh-augsburg.de/Vorlesungen/KooperativeSysteme/Folien/Zeitdienste.pdf

Dazu muss man noch sagen: Informatiker haben panisch Angst davor, dass
die Zeitinformation nicht eindeutig ist, also darf man nie die Uhr
zurückstellen. Meistens wird das mit dem Kompensationsfaktor der Uhr
geregelt.

Ich glaube auch, dass Einstein da noch vor seiner (kritisches dazu
vielleicht anderswann) Relativitätstheorie dran gearbeitet hat.
Gast #386031
Lesenswert?

Die kurze Antwort: einfach die Uhrzeit an das Label senden.

Die lange Antwort: Kommt darauf an, welche Umgebung du benutzt. Dein
Label hat sich die Funktion "setTest", oder der Zuweisungoperator ist
überschrieben, oder man kann das Label als Ausgabestream benutzen.

Welcher der beiden Schritte klappt denn nicht:
1. Uhrzeit holen
2. Text über ein Label ausgeben

Also, welche Umgebung hast du?
#386032
Lesenswert?

^^. Leider gehen beide schritte nicht. ich benutze den C++Builder6. und
möchte grafisch programmieren, wie du ja weißt.

wie hol ich uhrzeit mit gettime oder?? aber wie sieht dies vom code aus
und welche headerfiles braucht das. und um es über das Label auszugeben
muss ich ja nur doppelklick auf das label machen oder?? und dort den
code einfügen.
Gast #386033
Lesenswert?

Die Zeit würde ich mir mit Hilfe der Lib "time.h" holen. Codebeispiel
unter http://www.willemer.de/informatik/cpp/timelib.htm.
Oben ist noch "GetSystemTime" erwähnt, wahrscheinlich geht das nur
mit Visual Studio???

Mit C++Builder kenne ich mich nicht aus, wie weit kommst du? Zeigst du
schon eine graphische Oberfläche mit Label an, und kannst keinen Text
reinschreiben, oder klappt noch gar nichts?

Du musst dir eigentlich einfach die Deklaration der Label-Klasse
anschauen (vielleicht geht das über die Hilfe, ansonsten die Label.h),
da ist dann eine Funktion, die den Text des Labels setzt. Die musst du
einfach aufrufen.
Gast #386044
Lesenswert?

Zeit auf dem Label ausgeben:
mylabel->caption(itoa(time(0)));

itoa wandelt einen Integer-Wert in einen String um(Geht auch mit long).
Das ist C-Stil, in C++ geht das wahrscheinlich mit:

String s;
s<<time(0);
mylabel->caption(s);
#386045
Lesenswert?

Creates and initializes an instance of TDateTime.

__fastcall TDateTime()
__fastcall TDateTime(const TDateTime& src)
__fastcall TDateTime(const TDateTimeBase& src)
__fastcall TDateTime(const double src)
__fastcall TDateTime(const int src)
enum TDateTimeFlag {Date, Time, DateTime};
__fastcall TDateTime(const AnsiString& src, TDateTimeFlag flag =
DateTime);
__fastcall TDateTime(unsigned short year, unsigned short month,
unsigned short day);

__fastcall TDateTime(unsigned short hour, unsigned short min, unsigned
short sec, unsigned short msec);


Was muss ich machen um einen von denen bzw den letzten zu verwenden. Wo
muss ich das hinschreiben? ins cpp file oder ins h file??
Gast #386046
Lesenswert?

1. Die Header-Datei in deine cpp-Datei als include einfügen
2. in der CPP-Datei
TDateTime &tdt = new TDateTime(12,30,11,0);
oder TDateTime *tdt = new TDateTime(12,30,11,0);
schreiben (nur eins von beiden wird funktionieren, ich habe schon ewig
kein cpp mehr benutzt), um ein TDateTime-Objekt mit
12Uhr,30min,11sec,0msec (dein letzter Fall) zu erzeugen.
Gast #386049
Lesenswert?

Am Anfang "#define _WIN32" einfügen, wenn das Teil unter Windows
läuft. Dann noch den Kommentar im Abschnitt "sendto()" entfernen (das
"/*" nach printf("\n%s",str);

Und in der 12ten Zeile vor dem Ende das */ entfernen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren