我有一个后台应用程序,它需要每 1.5 秒向另一个进程发送一次保持活动状态。在 OSX 10.7 和 10.8 中一切正常,但在 OSX 10.9 下,许多保持活动通知被遗漏,有时最多 3 个。通常在前 3 或 4 分钟一切正常,然后开始出现问题。
经过进一步检查,OSX Mavericks 的“Timer Coalescing”功能似乎负责将请求的 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];
}
}
}
}