如何使用nanosleep睡眠随机时间?

我试图使用nanosleepfunction让我的进程在1/10秒之间随机hibernate一段时间?

我使用srand()为我的随机数生成器播种,使用进程ID,即im调用:

srand(getpid()); 

然后使用

 struct timespec delay; delay.tv_sec = 0; delay.tv_nsec = rand(); nanosleep(&delay, NULL); 

我怎样才能确保我睡觉0..1 / 10秒?

我要说你只需要100000000ULL * rand() / RAND_MAX纳秒,这至多为0.1s且至少为0s。 或者,尝试使用参数100000ULL * rand() / RAND_MAX usleep() 。 (我认为usleep需要更少的CPU资源。)

编辑:添加“unsigned long long”文字说明符以确保数字适合。请参阅下面的评论,并感谢caf指出这一点!)

你需要“限制”你的兰特(),如:

 delay.tv_nsec = rand() % 1e8; 

一些专家说这不是最好的方法,因为你使用数字的LSB,它们不像高位那样“随机”,但这是快速和可靠的。