Да - определены более старые стандарты POSIXusleep()
, поэтому это доступно в Linux:
int usleep(useconds_t usec);
ОПИСАНИЕ
Функция usleep () приостанавливает выполнение вызывающего потока на (как минимум) микросекунды в миллисекундах. Спящий режим может немного увеличиваться из-за любой активности системы, времени, затраченного на обработку вызова, или детализации системных таймеров.
usleep()
занимает микросекунды , поэтому вам придется умножить ввод на 1000, чтобы засыпать в миллисекундах.
usleep()
с тех пор устарел и впоследствии был удален из POSIX; для нового кода nanosleep()
предпочтительно:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
ОПИСАНИЕ
nanosleep()
приостанавливает выполнение вызывающего потока до тех пор, пока не истечет, по крайней мере, время, указанное в *req
, или пока не будет доставлен сигнал, запускающий вызов обработчика в вызывающем потоке или завершающий процесс.
Структура timespec используется для указания интервалов времени с точностью до наносекунды. Это определяется следующим образом:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Пример msleep()
функции, реализованной с использованием nanosleep()
продолжения сна, если он прерван сигналом:
#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*/)
в<unistd.h>
работает, но если я используюprintf("some things")
без\n
, он не работает.