私は1.5秒ごとに別のプロセスにキープアライブを送信する必要があるバックグラウンドアプリケーションを持っています。 OSX 10.7と10.8ではすべてがスムーズに動作しますが、OSX 10.9では多くのキープアライブ通知が見逃されます.3回になることもあります。通常、最初の3〜4分間は正常に動作し、問題が発生します。OSXで特定のプロセスのタイマー統合を無効にする
さらに検査した後、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];
}
}
}
}
ユーザーがアプリごとにオフにできることは間違いありませんが、それはおそらくあなたが本当に必要とする解決策ではないでしょう。 – Kevin
メインスレッドでキープアライブ作業を行う必要があるのはなぜですか? – trojanfoe
問題は、実際にメインスレッドまたはセカンダリスレッドで発生しても問題は発生しませんでした。 App Napは、現在表示されているUIエレメントが表示されていないすべてのアプリケーションに適用されます。すべてのUI要素が非表示または閉じている場合、App Napによってタイマーが遅くなることがアプリケーションに表示されます。 – ekscrypto