Sí, se han definido estándares POSIX anteriores usleep()
, por lo que está disponible en Linux:
int usleep(useconds_t usec);
DESCRIPCIÓN
La función usleep () suspende la ejecución del hilo de llamada para (al menos) usec microsegundos. El sueño puede alargarse ligeramente por cualquier actividad del sistema o por el tiempo dedicado a procesar la llamada o por la granularidad de los temporizadores del sistema.
usleep()
toma microsegundos , por lo que deberá multiplicar la entrada por 1000 para dormir en milisegundos.
usleep()
desde entonces ha quedado en desuso y posteriormente eliminado de POSIX; para el nuevo código, nanosleep()
se prefiere:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
DESCRIPCIÓN
nanosleep()
suspende la ejecución del hilo de llamada hasta que *req
haya transcurrido al menos el tiempo especificado , o la entrega de una señal que active la invocación de un controlador en el hilo de llamada o que finalice el proceso.
La estructura timepec se usa para especificar intervalos de tiempo con precisión de nanosegundos. Se define de la siguiente manera:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Una msleep()
función de ejemplo implementada usando nanosleep()
, continuando el sueño si es interrumpido por una señal:
#include <time.h>
#include <errno.h>
/* msleep(): Sleep for the requested number of milliseconds. */
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*/)
en<unistd.h>
trabajos, pero si uso conprintf("some things")
sin\n
, no funciona.