Taktfrequenz der CPU
-
Hallo,
bin neu hier und hoffe, daß ihr mir helfen könnt.
In einem Programm muß ich für eine Zeitschleife die Taktfrequenz der CPU (486-er) unter Dos im ANSI-C ermitteln. Aus diesem Wert kann ich dann die Zeit steuern.
Oder hat jemand eine andere Idee?Danke schon mal.
-BigMac-
-
also, wenn ne zeitschleife das gleiche is, wie sozusagen ne spieleschlefie, die mit ner bestimmten framerate läuft, dann gehts doch mit a)
timeGetTime() oder QueryPerformanceCounter() bzw QueryPerformanceFrequency().
is aber eigentlich nichts für konsole, sondern eher WINAPI bzw Spieleprogrammierung.
Wenn's sehr genau werden soll, musst du den PerformanceCounter nehmen, der hat 3,19 mhz, also ~1/1.000.000 sec genauigkeit.
vielleicht kannst du ja nochmal näher erläutern, was du machen willst, ansonsten hier die default-lösung, is aber wie gesagt WINAPI:#define ABSTAND 50 //in Millisekunden, z.B. 50 int AktuelleZeit,AlteZeit; AlteZeit=timeGetTime(); while(true) //Hier ne Endlosschleife { AktuelleZeit=timeGetTime(); if((AktuelleZeit-AlteZeit)>=ABSTAND) //und hier die Zeitschleife { //Hier jetzt die Anweisungen/Rechenoperationen etc... AlteZeit=timeGetTime(); } //Abbruchbedingung net vergessen !!! }
So, das is für mich ne Zeitschleife...
Wenn ich dich falsch verstanden hab, tut's mir leid, dass ich dich mit soviel müll zugetextet hab
Gruß
konstantin
-
Hi.
@ethereal:
Habe ich da nicht gelesen "DOS" und 486 CPU?
Da wird er wohl nicht sehr Erfolgreich mit dem Versuch sein, WINAPI zu programmieren.@BigMac:
Fuer genaues Timing solltest du wohl besser den Timer-Interrupt (IRQ0 => Interruptbenutzen.
(Wenn dir eine Aktualisierung ~21* pro Sekunde reicht)
-
ayehh, da hat er recht.
DOS und 486, ja tut mir leid, dann war das wohl blödsinn........
naja, wenigstens hat mich ein berliner korrigiert
bin nämlich auch einer
-
Hehe.
Und damit der Post auch sonst sinnvoll ist:
@Fragesteller:
Du kannst den Timer IRQ auch auf ganze Teiler von diesen ~21*/S einstellen.
zB. die Haelfte.
Dann leitest du den Interruptaufruf zB. nur jedes 2. mal an den Originalhandler weiter.