msec ermitteln unter c++ ?

Brusko

Well-Known Member
Hallo,

ich würde gerne unter c++ die verstrichende msec herrausfinden ,
mit time() frage ich ja "nur" die verstrichenden sekunden ab.

Ich möchte mir einen Timer schreiben der z.b 30 sekunden lang läuft aber
bis ca auf ne 10msec genau prüft.


mfg Michael

void single_shutter (int startinput , int startoutput , int count) // count=anzahl
{
int up = startoutput , down;
for (int i = startinput; i < (startinput + count); i++)
{
down = up + 1;
if (output[up] & output[down])
{output[up] = output[down] = !output[up];}
if ((input & !last_status_input) || (time(NULL) == timing))
{
if (!output[up] & !output[down])
{
last_status_shutter = !last_status_shutter;
output[up] = last_status_shutter;
output[down] = !output[up];
timing = time(NULL) + 30;
}
else if (output[up] != output[down])
{output[up] = output[down] = 0; timing = 0;}
}
up = up + 2;
last_status_input = input;
}
}


so hab ich den code bislang,
diese funktion wird in eine Abfrageschleife eingebaut wie ich ca alle 0,5 sek durchlaufen
lassen wollte, theoretisch könnte es also ja passieren wenn ich nur auf sekunde abfrage,
das die Schaltung 3 mal durchlaufen wird. das möchte ich verhindern.
 
Zuletzt bearbeitet:
Hallo KingNothing danke schon mal für die antwort, aber wenn ich den bsp code mal betrachte warten ja die wait funktion eine gewisse zeit. das heist ja das , das ganze program wartet oder ich mache es im extra thread. Ich schaue mir clock() natürlich mal genau an. schön wäre es aber ja wenn man etwas vorhandes wie die systemzeit abfragen kann.
Welches blos ebend msec genau ist. dann kan man sich doch ein thread sparen.

Ich sehe gerade noch....das die schleife ja nicht 3 fach ausgeführt werden könnte da ich ja timing auf null zurücksetze (oder hab ich ein denk fehler drin) ?
 
Also ein Thread ist nicht notwendig:

Code:
#include <stdio.h>
#include <time.h>

int main ()
{
  clock_t endwait = 0;	
  while(1) {
	// mache etwas anderes
	
	if(clock() >= endwait) {
		endwait = clock () + 0.5 * CLOCKS_PER_SEC ;
		printf("0,5sek\n");
	}
  }
	
  return 0;
}

So wird jede 0,5sek das printf ausgeführt und in der zeile "//mache ewas anderes" kannst du dein restliches Programm abarbeiten lassen. Wie genau das ganze ist kann ich dir aber auch nicht sagen, aber ich denk mit 10ms wirst du hinkommen (müsste man einmal CLOCKS_PER_SEC ansehen, bei mir glaub ich 10000 und kontrollieren wie oft die schleife abgearbeitet wird)
 
ich würde gerne unter c++ die verstrichende msec herrausfinden ,
mit time() frage ich ja "nur" die verstrichenden sekunden ab.

gettimeofday(2)

So recht verstehe ich dein Problem nicht, der Code ist mir keine Hilfe :ugly:

Willst du die Ausführungszeit messen? --> gettimeofday(2); getitimer(2)

Oder die Laufzeit beschränken? --> ualarm(3); setitimer(2)
 
Aber warum erhalte ich denn bei dem untemstehen code beides die gleichen werte ?
und zwar 6. ?

clock_t start , stop;
start = clock();
for (int i = 0; i < 10; i++) {sleep(3);}
stop = clock();
//double t3 =(double)(stop - start)/CLOCKS_PER_SEC;
cout << start;
cout << stop;


mein Problem hat sich in gewisser weise eigentlich erledigt. er sollte ebend die schleife nicht zweimal in der gleichen sekunde ausführen.
Die funktion bewirkt eine steuerung einer Jalousie mit einem Taster. rauf runter stop (usw). Wenn raus /runter geschaltet soll nach 30 sekunden alles wieder auf null geschaltet werden. was sowei ja jetzt auch geht.
Würde aber gerne für andere zwecke eine zeitmessung haben die weniger als 1 sek messen könnte.
 
Da ist dann wohl wirklich gettimeofday(2) anzuraten!

Wenn du auf ner x86 CPU bist könntest du auch direkt den Timestampcounter
via "rdtsc" und inline-assembler auslesen.
 
Zuletzt bearbeitet:
Zurück
Oben