sleep(1)或sleepForTimeInterval 1需要超过1秒的时间来唤醒

时间:2018-06-30 07:43:14

标签: ios objective-c macos

我面临着一个最特殊的错误,那就是sleep(1)需要花一秒钟以上的时间才能唤醒,因此我尝试用usleep()和[NSThread sleepForTimeInterval:1.0f]替换sleep(),但是问题仍然存在可以正常工作,但平均运行10分钟是可重现的。 我已经在睡眠之前和之后用时间戳记通过NSLogging进行了调试,同时还附上了Wireshark的屏幕截图。我的目标是连续进行1秒的投票

NSLog(@"4.ProcessHeartBeat: before sleepForTimeInterval check: %@", [formatter stringFromDate:[NSDate date]]);

 [NSThread sleepForTimeInterval: 1.0f];

NSLog(@"5.ProcessHeartBeat: after sleepForTimeInterval check: %@", [formatter stringFromDate:[NSDate date]]);

整个代码在使用NSThread实现的无限线程上运行

enter image description here

1 个答案:

答案 0 :(得分:0)

通常,轮询是不好的。有什么办法不轮询吗?

休眠线程也很糟糕;应该真正避免。尤其是主线程(不知道这是否是主线程)

具体来说,由于各种原因,不能保证所有的睡眠时间都是准确的。

您可以尝试dispatch_after()或NSTimer,但这不太可能更准确。至少,它不会sleep()一个线程。

总体而言,应编写代码,使其在大约正确的时间处理内容,然后使用系统时钟来确定实际花费了多少时间。请注意,由于各种电源管理和散热技巧,CPU速度本身可能会变化。因此,诸如#个时钟周期之类的事情是没有意义的。