Tak - zdefiniowano starsze standardy POSIXusleep()
, więc jest to dostępne w systemie Linux:
int usleep(useconds_t usec);
OPIS
Funkcja usleep () zawiesza wykonywanie wątku wywołującego na (przynajmniej) usec mikrosekund. Sen może zostać nieco wydłużony przez dowolną aktywność systemu lub przez czas spędzony na przetwarzaniu połączenia lub przez ziarnistość zegarów systemowych.
usleep()
zajmuje mikrosekundy , więc będziesz musiał pomnożyć dane wejściowe przez 1000, aby spać w milisekundach.
usleep()
od tego czasu jest przestarzały, a następnie usunięty z POSIX; dla nowego kodu nanosleep()
preferowane:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
OPIS
nanosleep()
zawiesza wykonywanie wątku wywołującego do *req
czasu, gdy upłynie co najmniej czas określony w lub do dostarczenia sygnału, który wyzwala wywołanie procedury obsługi w wątku wywołującym lub kończy proces.
Przedział czasu struktury służy do określania przedziałów czasu z dokładnością do nanosekund. Jest zdefiniowany w następujący sposób:
struct timespec {
time_t tv_sec;
long tv_nsec;
};
Przykładowa msleep()
funkcja zaimplementowana wykorzystująca nanosleep()
kontynuację uśpienia w przypadku przerwania go sygnałem:
#include <time.h>
#include <errno.h>
int msleep(long msec)
{
struct timespec ts;
int res;
if (msec < 0)
{
errno = EINVAL;
return -1;
}
ts.tv_sec = msec / 1000;
ts.tv_nsec = (msec % 1000) * 1000000;
do {
res = nanosleep(&ts, &ts);
} while (res && errno == EINTR);
return res;
}
sleep(/*seconds*/)
w<unistd.h>
działa, ale jeśli używam zprintf("some things")
bez\n
, to nie działa.