Có - các tiêu chuẩn POSIX cũ hơn được xác định usleep()
, do đó, điều này có sẵn trên Linux:
int usleep(useconds_t usec);
SỰ MIÊU TẢ
Hàm us ngủ () tạm dừng thực thi chuỗi gọi trong (ít nhất) usec micro giây. Giấc ngủ có thể được kéo dài một chút bởi bất kỳ hoạt động hệ thống nào hoặc do thời gian xử lý cuộc gọi hoặc bởi độ chi tiết của bộ định thời hệ thống.
usleep()
mất vài giây , do đó bạn sẽ phải nhân số đầu vào lên 1000 để ngủ trong một phần nghìn giây.
usleep()
kể từ đó đã bị phản đối và sau đó bị xóa khỏi POSIX; đối với mã mới, nanosleep()
được ưu tiên:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
SỰ MIÊU TẢ
nanosleep()
đình chỉ việc thực hiện chuỗi cuộc gọi cho đến khi ít nhất là thời gian được chỉ định trong *req
đã trôi qua, hoặc việc phát tín hiệu kích hoạt việc gọi trình xử lý trong luồng gọi hoặc kết thúc quá trình.
Thời gian cấu trúc được sử dụng để xác định các khoảng thời gian với độ chính xác nano giây. Nó được định nghĩa như sau:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Một msleep()
chức năng ví dụ được triển khai bằng cách sử dụng nanosleep()
, tiếp tục chế độ ngủ nếu bị gián đoạn bởi tín hiệu:
#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*/)
trong<unistd.h>
các tác phẩm, nhưng nếu tôi sử dụngprintf("some things")
mà không có\n
, nó không hoạt động.