[C++]Sleep kleiner als ms?

Also unter Linux gibt es die POSIX Funktion nanosleep(), die theoretisch eine Granularität bis auf Nanosekunden besitzt. Ob das Dein Rechner schafft, ist eine andere Frage ;-)
Wie schon weiter oben geschrieben wurde, liegt die Funktion in time.h, jedoch ist sie kein Bestandteil der Standardbibliothek (da sehr plattformabhängig), sondern eben eine POSIX Funktion.

Man kann sie beispielsweise wie folgt verwenden:

Code:
/* interval_size specifies the step size of each measurement interval 
* and corresponds to [milliseconds]. Therefore a value of 100 
* means 100 ms (= 0.1 s) */
int interval_size = 10;
struct  timespec req;
req.tv_sec = 0;
req.tv_nsec = interval_size * 1000 * 1000; /* 0.1 sec */

[...]

for(i = 0; i < (time * 1000 / interval_size); ++i) {
    /* do something */
    nanosleep(&req, NULL);
}

Falls man strikt standardkonform arbeiten möchte (gcc -W -Wall -pedantic -std=c99 -o foo foo.c), muss man seinem Compiler mitteilen, dass die »richtige« time.h eingebunden wird. Das geht entweder über Compilerflags, oder indem man in der ersten Zeile POSIX freischaltet, z.B.:
Code:
#define _POSIX_C_SOURCE 199309L
Es gibt aber einige mehr dieser Optionen. Man kann diese bei Linux unter /usr/include/features.h nachlesen.

HTH,
Martin
 
Tobias K. hat gesagt.:
Siehste, Tobias hat Recht!
Der Tobi hat auch ein klein wenig mehr Ahnung von C als der Dennis. ;)
Ich hab ja schon ewig nichts mehr mit C gemacht. Hatte mich nur erinnert, dass es da bei PHP was gab.
Und da PHP ja OpenSource ist kann man da ja wunderbar mal in den Source-Code schauen.

Nur dumm, dass Windows das nicht kann.
 
Es gibt glaub ich eine Funktion gettickcount, oder ähnlich damit lässt sich in kleinen Zeitbereichen einiges machen, einfach mal danach suchen.
 
Vergiß es unter Windows
Du kannst immer nur auf Timer zugreifen, die Dir das OS zur Verfügung stellt. Unter Windows ist die minimale Timergranularität 1ms! Wer mehr will, sollte sich ein OS holen, welches das macht. Da Windows kein Echtzeit-OS ist, sind auch diese Timer nicht allzu genau.
 

Neue Beiträge

Zurück