Prozessorzeit
Hallo,
ich habe ein kleines Programm geschrieben, das mir nach 5 Sekunden zeigt, das 5 Sekunden um sind.
Wenn ich das Programm auf dem RevPi Core laufen lasse, endet es aber erst nach 7 Sekunden, zeigt mir aber 5 Sekunden an. Irgendwie stimmt die Prozessorzeit nicht habe ich das Gefühl.
Das gleiche Programm habe ich auf meinen Raspberry Pi 3 laufen und dort funktioniert es, also nach 5 Sekunden bekomme ich die Meldung das 5 Sekunden um sind.
Kann mir wer helfen?
ich habe ein kleines Programm geschrieben, das mir nach 5 Sekunden zeigt, das 5 Sekunden um sind.
Wenn ich das Programm auf dem RevPi Core laufen lasse, endet es aber erst nach 7 Sekunden, zeigt mir aber 5 Sekunden an. Irgendwie stimmt die Prozessorzeit nicht habe ich das Gefühl.
Das gleiche Programm habe ich auf meinen Raspberry Pi 3 laufen und dort funktioniert es, also nach 5 Sekunden bekomme ich die Meldung das 5 Sekunden um sind.
Kann mir wer helfen?
- Attachments
-
- clock.jpg (17 KiB) Viewed 11231 times
Der Fakt verstärkt sich mit der zeit, also wenn ich 30Sekunden eingebe, endet das programm erst nach ca. 50Sekunden.
Wenn es dir um ein genaues Signal geht, mit dem du etwas takten willst, empfehle ich dir einen Signal Handler zu benutzen.
Siehe u.a.: https://stackoverflow.com/questions/400 ... ption-in-c
Siehe u.a.: https://stackoverflow.com/questions/400 ... ption-in-c
Code: Select all
void sigalrm_handler(int sig)
{
// This gets called when the timer runs out. Try not to do too much here;
// the recommended practice is to set a flag (of type sig_atomic_t), and have
// code elsewhere check that flag (e.g. in the main loop of your program)
}
...
signal(SIGALRM, &sigalrm_handler); // set a signal handler
alarm(10); // set an alarm for 10 seconds from now
Hallo Timo und danke für deine Antwort,
ich möchte zur laufzeit eines Programmes immer mal wieder abfragen ob die Zeit schon um ist, aber nicht das dies als eine art Interrupt funktioniert.
Daher war clock() relativ passend, da ich hier eine Startzeit abfragen kann und später dies mit dem neuen Stand vergleichen kann. Nur leider bekomme ich eine merkwürdige Taktzeit zurück.
Wie schon beschrieben habe ich beim Raspberry Pi dieses Problem nicht. Man könnte sagen, was normal eine Sekunde ist, interpretiert der RevPi Core als 1,5 Sekunden.
ich möchte zur laufzeit eines Programmes immer mal wieder abfragen ob die Zeit schon um ist, aber nicht das dies als eine art Interrupt funktioniert.
Daher war clock() relativ passend, da ich hier eine Startzeit abfragen kann und später dies mit dem neuen Stand vergleichen kann. Nur leider bekomme ich eine merkwürdige Taktzeit zurück.
Wie schon beschrieben habe ich beim Raspberry Pi dieses Problem nicht. Man könnte sagen, was normal eine Sekunde ist, interpretiert der RevPi Core als 1,5 Sekunden.
Das komische ist, das funktionien wie sleep() super funktionieren
Hallo Tim,
ich versuche dem mal auf den Grund zugehen. Entweder können unsere Linux-Leute was dazu sagen oder dann vielleicht die Raspi-Entwickler, zu denen wir einen ganz guten Draht haben...
ich versuche dem mal auf den Grund zugehen. Entweder können unsere Linux-Leute was dazu sagen oder dann vielleicht die Raspi-Entwickler, zu denen wir einen ganz guten Draht haben...
Unser RevPi Motto: Don't just claim it - make it!
Hallo Volker,
über die Funktion "time()" funktioniert es wunderbar.
Die funktion "clock()" ist ansich ja generell ungenau, aber das Sie so ausschlägt ist mir neu, vielleicht bekommst du ja einen guten Hinweis dahingegend.
über die Funktion "time()" funktioniert es wunderbar.
Die funktion "clock()" ist ansich ja generell ungenau, aber das Sie so ausschlägt ist mir neu, vielleicht bekommst du ja einen guten Hinweis dahingegend.
Hallo Tim,
die Ursache ist schnell erklärt: Clock() ist so definiert, dass es die verwendete CPU Time für DEINEN PROZESS ausgibt. Daher kannst Du die nicht als Zeitmesser verwenden, wenn da noch andere Prozesse laufen, die viel Rechenzeit beanspruchen. Bei Deinem Raspi 3 hattest Du halt nicht den RT patch und PiControl drauf... daher war clock() dann sehr nah an time(). Aber auf dem RevPi läuft halt schon eine große Menge Hintergrundprozesse, falls Du nicht ein eigenes Image ohne diese Prozesse gebaut hast. Dann ist eben clock() deutlich weniger als time()...
die Ursache ist schnell erklärt: Clock() ist so definiert, dass es die verwendete CPU Time für DEINEN PROZESS ausgibt. Daher kannst Du die nicht als Zeitmesser verwenden, wenn da noch andere Prozesse laufen, die viel Rechenzeit beanspruchen. Bei Deinem Raspi 3 hattest Du halt nicht den RT patch und PiControl drauf... daher war clock() dann sehr nah an time(). Aber auf dem RevPi läuft halt schon eine große Menge Hintergrundprozesse, falls Du nicht ein eigenes Image ohne diese Prozesse gebaut hast. Dann ist eben clock() deutlich weniger als time()...
Unser RevPi Motto: Don't just claim it - make it!
Danke dir Volker für deine Antwort, jetzt versteh ichs=)