select在mac上当延迟为何不管用?


   
  void msleep(int m) {
  
if(m > 0) {
struct timeval tt;
tt.tv_sec = 0;
tt.tv_usec = m * 1000;
select(0, NULL, NULL, NULL, &tt);
}
}

在 Linux/Android 上都可以使用以上方法实现指定毫秒的延迟
为何在 OS X 上无法实现,而 iOS 上可以

update: select 调用之后 errno = 22,不了解如何修改参数,请大神指点一二~~
或者给出另外一个比较合理的跨平台延迟方案,usleep 在 Linux 上表现不理想,希望有其他答案



相关链接

mac C++

貞德·逹魯克 10 years, 4 months ago

囧,mac 上对 struct timeval 有数值限制

   
  typedef int __int32_t;
  
typedef __int32_t __darwin_useconds_t;

__darwin_suseconds_t tv_usec;

虽然上限可以表示 pow(2, 31) / 1000 / 1000 大致 2k 多秒,
但是传入超过 1000000 的值就会被认为是无效的参数

ps: Linux/Android 上没有此限制

yueyut answered 10 years, 4 months ago

Your Answer