000
20.12.2002, 20:18 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Erstellt von virtual Um einen Prozess unter Linux oder UNIX schlafen zu legen, bedient man sich normalerweise der Funktion sleep(3). Leider hat diese Funktion den Nachteil, dass man mindestens eine Sekunde schlafen muss.
Doch das muss nicht sein: millisleep bietet den gleichen Komfort wie die Windows API routine Sleep, man kann mit ihr theoretisch auf die tausendstel Sekunde genau schlafen. Auf PCs ist die Mindestschlafdauer jedoch (unabh. von Windows oder Linux) ca. 1/60 Sekunde.
Die Routine gibt 0 zurück, wenn alles klar ging, -1 bei einem Fehler (kann eigentlich nur ein falscher Parameter sein.)
nanosleep(2), was hier verwendet wird, ist POSIX. Wer auch mit BSD 4.3 zufrieden ist, kann direkt usleep(3) verwenden.
C++: |
int millisleep(unsigned p_nMilliSeconds) { struct timespec tSleep; struct timespec tRemainder; int nRet;
// Setup structures tSleep.tv_sec = p_nMilliSeconds/1000; tSleep.tv_nsec = (p_nMilliSeconds%1000)*1000000;
// call nanosleep. The loop is needed to handle interrupts while (-1 == (nRet=nanosleep(&tSleep, &tRemainder))) { if (EINTR != errno) break; tSleep = tRemainder; }
return nRet; }
|
-- class God : public ChuckNorris { }; Dieser Post wurde am 13.01.2003 um 15:24 Uhr von virtual editiert. |