问题描述
我在 usleep man 中看到:
EINVAL
usec is not smaller than 1000000. (On systems where that is considered an error.)
所以我想知道在 Ubuntu 中使用价值大于 1000000 的 usleep 是否可以,如果不是(或者如果我想支持其他平台)当我需要睡眠时有什么替代方案2.2 秒(例如).
So i wonder if its ok to use usleep in Ubuntu with value greater than 1000000 and if not (or in case that i want to support other platforms ) what is the alternative when i need sleep for 2.2 sec (for example) .
谢谢.
推荐答案
为了安全起见,另一种选择是信任文档并使用循环来实现它:
One alternative is to trust the documentation and implement it using a loop just to be safe:
#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()
的返回值,为了简洁我省略了.
You should also inspect the return value of usleep()
, I omitted that for brevity.
在生产中,您可以使用 Autoconf 和朋友来检测正确的 USLEEP_MAX
在编译时,如果本地系统对参数没有限制,甚至可以切换到普通包装器.可以享受数小时的乐趣.
In production, you can have fun with Autoconf and friends to detect the proper USLEEP_MAX
at compile-time, and even switch to a plain wrapper if the local system doesn't have a limit for the argument. Hours of fun can be had.
这篇关于在 Ubuntu 中使用价值大于 1000000 的 usleep 是否安全的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!