我在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,甚至在本地系统没有参数限制的情况下切换到普通包装器。我们可以玩上几个小时。

09-04 11:40