aktuelle Zeit
annA
- sonstiges
Hallo zusammen,
die time-Funktion in C gibt ja die Sekunden zurück, gibts
da noch was genaueres? Viellicht hundertsel oder so?
Viele Grüße
annA
PS: Es muß eine C-Funktion sein!
schau dir mal das an, villeicht hilfts
http://www-user.tu-chemnitz.de/~heha/viewzip.cgi/bastelecke/Rund%20um%20den%20PC/Wetterstation/telemet.zip/tenki.c?auto=CPP
hi x-man
danke für den Link, werde mir mal die GetTimeFormat-Funktion
anschauen, vielleicht kann ich die verwenden.
Gruß
annA
Hallo annA,
hast Du die Lib BIOS.H ?
Dann steht Dir die Funktion biostime(int cmd, long time) zur Verfügung. Allerdings liest die nur die vier Bytes im Bios-Variablenbereich der Maschine aus. Die Sekunden in Ticks (65536 sind eine Stunde) und Stunden und Tage.
Diese Zeit läuft weg und außerdem hat sie um Mitternacht eine Definitionslücke von ca. 7 Sekunden, was durch Quantisierungsprobleme bei der ganzzahligen Division begründet ist.
long biostime(int cmd, long newtime);
0 Lesen des Zählers (newtime ignoriert)
1 Setzen des Zählers auf den Wert von
newtime, Ergebnis == newtime
Die Zeit wird ab 0 Uhr in 18.2 Einheiten pro Sekunde gelesen.
Ich hoffe, das hilft Dir weiter.
LG
Tom
Hi Tom
hast Du die Lib BIOS.H ?
ich habe die leider nicht, und die Gefahr, dass mein Prof
die auch nicht hat, ist mir zu groß.
Vielleicht finde ich ja noch eine andere Lösung...
Trotzdem danke :o)
Gruß
annA
Hallo Anna,
hast Du die Lib BIOS.H ?
ich habe die leider nicht, und die Gefahr, dass mein Prof
die auch nicht hat, ist mir zu groß.
Unter welchem Betriebssystem wird programmiert?
Bei DOS / Windows wäre es so:
Dann musst Du eben eine Stufe tiefer klettern und die BIOS-Variablen direkt auslesen. Das geht auch noch unter Windows. Da muss man sich nur erst den Zeiger auf die Kopie des Bios-Variablenbereiches des aktuellen Prozesses besorgen. Wie die Compiler-Variable bei C heißt, weiß ich leider nicht. Das müsste ja aus der Hilfe zum System Programmiersystem herauszufinden sein.
Im Real-Mode liegt die bei 0040:0000 oder auch 0000:0400 , was das selbe ist. Dementsprechend wird diese 0400 im Namen der Variable vorkommen, so wie es nach guter alter Systemprogrammiererart Sitte ist.
In der Variablen steht dann der Descriptor auf die Variablenstruktur. Den setzt Du dann als Segment-Anteil ein
bei mem400:006C stehen dann die vier Bytes für die DOS-Zeit.
Denk beim Lesen an die Intel-Konvention.
Grüße
Tom
Hallo Anna,
nun mal anders herum gefragt. Hast Du in C schon direkt mit Interrupts gearbeitet? Dann müsste eigentlich auch Windows noch der Int 1Ah Dein Freund sein. Der liest die Hardwareuhr von PC-basierten Systemen aus.
Und über das DOS-API int 21h AH=2Ch
Nach dem Aufruf steht in
CH Stunde
CL Minute
DH Sekunde
DL Hundertstel Sekunde
Viel Erfolg
Grüße
Tom
Hallo annA,
warum brauchst du die hundertstel denn, wahrscheinlich für eine stoppuhr?
ich benutze in diesem fall die eigene funktion readCounter:
(Windows / intel-compiler)
__int64 readCounter(void){
__asm rdtsc; // read_timestamp_counter
}
(Linux / gcc)
long long readCounter(void){
asm("rdtsc"); // read_timestamp_counter
}
start=readCounter(); ... Anweisungen ...; end=readCounter();
dauer=end-start;
'dauer' ist dann die anzahl der prozessortackte für ... Anweisungen ... und die kann man ja in millionstel sek. umrechnen wenn du lust hast...
falls das überhaupt das ist was du suchst, kannst dich ja nochmal melden...
gruß oggy
HI Oggy,
ja, brauche die Hundertstel für eine art Stoppuhr:
Ich bekomme von einem Server die Y-Werte einer Sinuskurve und muß
die Frequenz berechnen.
Gruß
annA