ใช่ - มาตรฐานPOSIXรุ่นเก่าที่กำหนดไว้usleep()
ดังนั้นสิ่งนี้จึงพร้อมใช้งานบน Linux:
int usleep(useconds_t usec);
คำอธิบาย
ฟังก์ชัน usleep () ระงับการดำเนินการของเธรดการโทรเป็นเวลา (อย่างน้อย) usec microseconds การนอนหลับอาจยาวขึ้นเล็กน้อยจากกิจกรรมของระบบใด ๆ หรือตามเวลาที่ใช้ในการประมวลผลการโทรหรือตามความละเอียดของตัวจับเวลาระบบ
usleep()
ใช้เวลาในระดับไมโครวินาทีดังนั้นคุณจะต้องคูณอินพุตด้วย 1,000 เพื่อที่จะเข้าสู่โหมดสลีปในมิลลิวินาที
usleep()
ได้เลิกใช้แล้วและต่อมาได้ถูกลบออกจาก POSIX; สำหรับรหัสใหม่nanosleep()
เป็นที่ต้องการ:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
คำอธิบาย
nanosleep()
ระงับการเรียกใช้เธรดการเรียกจนกว่าอย่างน้อยเวลาที่ระบุไว้*req
จะผ่านไปหรือการส่งสัญญาณที่ทริกเกอร์การเรียกใช้ตัวจัดการในเธรดการโทรหรือยุติกระบวนการ
โครงสร้าง timespec ใช้เพื่อระบุช่วงเวลาด้วยความแม่นยำระดับนาโนวินาที กำหนดไว้ดังนี้:
struct timespec {
time_t tv_sec;
long tv_nsec;
};
msleep()
ฟังก์ชั่นตัวอย่างที่ใช้งานโดยใช้nanosleep()
การนอนหลับต่อไปหากสัญญาณถูกขัดจังหวะ:
#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*/)
ในการ<unistd.h>
ทำงาน แต่ถ้าฉันใช้printf("some things")
โดยไม่ใช้\n
มันจะไม่ทำงาน