我有一个后台应用程序,每1.5秒钟需要向另一个进程发送保持活动状态的信号。 在OSX 10.7和10.8中一切正常,但在OSX 10.9下会错过很多保活通知,有时达到3个。通常在前3或4分钟内一切正常,然后问题开始发生。
经过进一步检查,似乎OSX Mavericks的“定时器协同”功能会决定将请求的1.5秒延长至最多4.0秒。
有没有办法指示NSThread不进行协同?或者至少指示允许的最大协同变化?
参考以下代码:
+(void)keepAliveThread
{
@autoreleasepool {
void (^keepAlive)() = ^ (){
// (snipped!) do something...
};
dispatch_queue_t mainQueue = dispatch_get_main_queue();
while( [NSThread currentThread].isCancelled == NO )
{
@autoreleasepool {
dispatch_async(mainQueue, keepAlive);
[NSThread sleepForTimeInterval:1.5];
}
}
}
}