有什么用的tim.tv_sec,并tim.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;
}
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 72
半秒是500,000,000纳秒,因此您的代码应为:
tim.tv_sec = 0;
tim.tv_nsec = 500000000L;
Run Code Online (Sandbox Code Playgroud)
事实上,你的代码正在睡眠1.0000005s(1s + 500ns).
Dav*_*ave 52
tv_nsec是以纳秒为单位的睡眠时间.500000us = 500000000ns,所以你想要:
nanosleep((const struct timespec[]){{0, 500000000L}}, NULL);
Run Code Online (Sandbox Code Playgroud)
我通常使用一些#define和常量来简化计算:
#define NANO_SECOND_MULTIPLIER 1000000 // 1 millisecond = 1,000,000 Nanoseconds
const long INTERVAL_MS = 500 * NANO_SECOND_MULTIPLIER;
Run Code Online (Sandbox Code Playgroud)
因此我的代码看起来像这样:
timespec sleepValue = {0};
sleepValue.tv_nsec = INTERVAL_MS;
nanosleep(&sleepValue, NULL);
Run Code Online (Sandbox Code Playgroud)
这对我有用。
#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;
}
Run Code Online (Sandbox Code Playgroud)