キープアライブを 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];
}
}
}
}