У меня есть фоновое приложение, которое требует отправить keep-alive в другой процесс каждые 1,5 секунды. Все работает плавно в OSX 10.7 и 10.8, но в OSX 10.9 многие уведомления о сохранении остаются пропущенными, иногда до 3. Обычно все работает нормально в течение первых 3 или 4 минут, после чего возникают проблемы.
После дополнительной проверки кажется, что функция OSX Mavericks "Таймер Coalescing" будет отвечать за принятие решения о продлении запрошенных 1,5 секунд до 4 секунд.
Есть ли способ указать в 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];
}
}
}
}