我面临着一个最特殊的错误,那就是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实现的无限线程上运行
答案 0 :(得分:0)
通常,轮询是不好的。有什么办法不轮询吗?
休眠线程也很糟糕;应该真正避免。尤其是主线程(不知道这是否是主线程)
具体来说,由于各种原因,不能保证所有的睡眠时间都是准确的。
您可以尝试dispatch_after()或NSTimer,但这不太可能更准确。至少,它不会sleep()一个线程。
总体而言,应编写代码,使其在大约正确的时间处理内容,然后使用系统时钟来确定实际花费了多少时间。请注意,由于各种电源管理和散热技巧,CPU速度本身可能会变化。因此,诸如#个时钟周期之类的事情是没有意义的。