如何在C中使用nanosleep()? 什么是`tim.tv_sec`和`tim.tv_nsec`?

以下是tim.tv_sectim.tv_nsec

我怎样才能睡眠执行500000微秒?

 #include <stdio.h> #include <time.h> int main() { struct timespec tim, tim2; tim.tv_sec = 1; tim.tv_nsec = 500; if(nanosleep(&tim , &tim2) < 0 ) { printf("Nano sleep system call failed \n"); return -1; } printf("Nano sleep successfull \n"); return 0; } 

半秒是500,000,000纳秒,所以你的代码应该是:

 tim.tv_sec = 0; tim.tv_nsec = 500000000L; 

就目前而言,你的代码正在睡眠1.0000005s(1s + 500ns)。

tv_nsec是以纳秒为单位的睡眠时间。 500000us = 500000000ns,所以你想要:

 nanosleep((const struct timespec[]){{0, 500000000L}}, NULL); 

500000微秒是500000000纳秒。 您只需等待500 ns = 0.5μs。

我通常使用一些#define和常量来简化计算:

 #define NANO_SECOND_MULTIPLIER 1000000 // 1 millisecond = 1,000,000 Nanoseconds const long INTERVAL_MS = 500 * NANO_SECOND_MULTIPLIER; 

因此我的代码看起来像这样:

 timespec sleepValue = {0}; sleepValue.tv_nsec = INTERVAL_MS; nanosleep(&sleepValue, NULL); 

这对我工作….

 #include <stdio.h> #include <time.h> /* Needed for struct timespec */ int nsleep(long miliseconds) { struct timespec req, rem; if(miliseconds > 999) { req.tv_sec = (int)(miliseconds / 1000); /* Must be Non-Negative */ req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000; /* Must be in range of 0 to 999999999 */ } else { req.tv_sec = 0; /* Must be Non-Negative */ req.tv_nsec = miliseconds * 1000000; /* Must be in range of 0 to 999999999 */ } return nanosleep(&req , &rem); } int main() { int ret = nsleep(2500); printf("sleep result %d\n",ret); return 0; } 

POSIX 7

首先find函数: http : //pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html

包含一个到time.h的链接,作为头文件应该是定义结构的地方:

标题应声明timespec结构,其中至less包括以下成员:

 time_t tv_sec Seconds. long tv_nsec Nanoseconds. 

男人2 nanosleep

伪官员glibc文档,你应该经常检查系统调用:

 struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ };