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

时间:2011-06-20 00:06:47

标签: c random delay

我试图使用nanosleep函数让我的进程在1/10秒之间随机休眠一段时间?

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

srand(getpid());

然后使用

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

delay.tv_nsec = rand() % 1e8;

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