Forum: Knobelecke
Moderatoren: broesel, juergenThema: effektivster Timer
effektivster Timer
ITEDVO am 04.08.2010 um 04:01
hab mir wärend der zugfahrt von der schweiz nach wien ziemlich den kopf darüber zerbrochen was ich mal für ein
rätsel posten könnte =b
naja, in diesem fall gibt es wieder mehrere lösungen. kann sogar für den einen oder anderen für später ziemlich nützlich sein =b
naja, die aufgabe besteht darin:
die ausprogrammierung eines timers, erlaubt sind funktionen wie delay() etc.
hoffe auf mehrere, sowohl schwierige aber vorallem auf sehr effiziente und genaue lösungen.
selber werde ich auch eine lösung präsentieren, hoffe dann auf feedback was besser gemacht werden könnte.
gruß
ITEDVO
--
Was nicht ist, kann noch werden =b
rock by vote or play by vote
<a href="http://www.selfmades.eu" target="blank"><img src="http://selfmades.eu/Clanwerbung/LinkUs/ITEDVO.jpg" alt="Clan Selfmades" title="Clan Selfmades"></a>
Re: effektivster Timer
Patrick am 04.08.2010 um 12:00
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
int main()
{
struct timeval timeout;
int i=0;
while(i<100)
{
timeout.tv_sec = 0;
timeout.tv_usec = 50000; // 50000 Mikrosekunden
select(0, NULL, NULL, NULL, &timeout);
printf("%d. Erwachen\n", i++);
}
return EXIT_SUCCESS;
}
--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.
Re: effektivster Timer
Martin Conrad (webmaster) am 06.08.2010 um 21:26
nö, im Userspace muss man schon mit Korrekturwerten arbeiten. Ein Weg ist es sich auf die Systemzeit zu beziehen(microtime() o.Ä.) um dann Korrekturwerte zu erhalten. Ansonsten rennt so ein Timer aus der Bahn.
Bis denne
Martin
--
0xC0FFEE
Re: effektivster Timer
Patrick am 07.08.2010 um 10:05
--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.
Re: effektivster Timer
Martin Conrad (webmaster) am 07.08.2010 um 11:29
Zitat:
Martin: Wenn etwas exakt alle 1 Sekunde laufen _muss_, hilft auch ein Korrekturwert nichts, wenn das Programm erst nach 1,1 Sekunden aufgerufen wird. Man kann dann zwar den Timeout für den nächsten Aufruf auf 0,9 Sekunden setzen, aber das war es auch schon. Ich stimme dir also nur teilweise zu und freue mich auf genauere Lösungen![]()
Da sind wir dann bei nem Echtzeitsystem, das die Toleranzen genau definiert und die dann garantiert werden müssen. Lösbar ist das wohl nur im Kernelspace, weil die Verzögerungen und Ungenauigkeiten sonst von Shedulerentscheidungen abhängig sind.
Bis denne
Martin
--
0xC0FFEE
