我在usleep man中看到:
EINVAL
usec is not smaller than 1000000. (On systems where that is considered an error.)
所以我想知道在Ubuntu中使用usleep是否可以,如果不可以(或者我想支持其他平台),当我需要睡眠2.2秒时(例如)。
谢谢您。
最佳答案
另一种方法是信任文档,并使用循环实现文档,以确保安全:
#define USLEEP_MAX (1000000 - 1)
void long_sleep(unsigned long micros)
{
while(micros > 0)
{
const unsigned long chunk = micros > USLEEP_MAX ? USLEEP_MAX : micros;
usleep(chunk);
micros -= chunk;
}
}
您还应该检查
usleep()
的返回值,为了简洁起见,我省略了它。在产品中,您可以与Autoconf和朋友一起在编译时检测正确的
USLEEP_MAX
,甚至在本地系统没有参数限制的情况下切换到普通包装器。我们可以玩上几个小时。