mir ist nicht ganz klar, was du jetzt wirklich suchst.
tobb hat geschrieben:
Allegro Dolumentation hat geschrieben:
void rest(unsigned int time);
Passing 0 as parameter will not wait, but just yield.
Ein "usleep(0)" entspricht dem "rest(0)". Daher es wird nicht gewartet, der Prozeß wird "unterbrochen" und in die Warteschlange eingereiht (yield).
tobb hat geschrieben:Unter Windows schläft ein CrossSleep(1) ca 2ms... was noch aktzeptabel ist...
Unter Linux (Ubuntu 7.04 Feisty) verschläft ein CrossSleep(1) allerdings ganze 13ms... was absolut inakzeptabel ist...
Gibts noch genauere Funktionen für Linux?
wenn du beide Systeme (Windows oder Linux) unter eine hohe Last stellst, wirst du auf beiden Systemen über 100ms kommen können
wenn beide Systeme idlen, solltest du sowohl unter Windows, als auch unter Linux auf einen Wert von ca 1-2ms kommen könne, ansonsten ist etwas faul.
Die Funktionen sind ja genau. Wenn die Zeit abgelaufen ist UND dein Prozeß die höchste Priorität (aus Sicht des Schedulers) erreicht hat, wird der Scheduler auch deinem Prozeß die CPU zuteilen.
Nachdem Prozesse unterbrechbar sind, kann es dir auch passieren, daß direkt vor dem "usleep" ein Kontextswitch stattfindet, wodurch der "usleep" Aufruf gleich als erster Systemcall abgesetzt wird, nach dem deinem Prozeß die CPU wieder zugeteilt wurde. Daher würde dir auch keine "noch so genauer Funktion" eine größere Genauigkeit garantieren können!.
Gruß
gms