Код в NSTimer предотвращает автоматический сон

Кто-то очень любезно предоставил решение, которое дало именно то, что я пытался сделать.

const selector = "#panels img[src='https://hyperspace.marquiskurt.net/icons/favicon-32x32.png']";
function fixImages() {
    const maybeBadImage = document.querySelector(selector);
    if(maybeBadImage){
        maybeBadImage.src = "chrome://favicon/https://hyperspace.marquiskurt.net/app/";
    }
}
const observer = new MutationObserver(fixImages);
function initMod() {
    if(!document.querySelector(selector)){
        setTimeout(initMod, 0);
        return;
    }
    observer.observe(document.querySelector(selector), { attributes: true });
    fixImages();
}
initMod();

Если для setTimeout задано значение 0, пунктирная src немедленно исправляется без каких-либо визуальных изменений, которые может видеть пользователь. Этот сценарий может быть изменен для использования, если у кого-то еще возникает проблема, когда веб-браузер Vivaldi неправильно изменяет src для значка определенной веб-панели, добавленной пользователем.

7
задан s4y 31 March 2009 в 19:22
поделиться

3 ответа

Доступ к диску предотвратит переход вашего компьютера в спящий режим, согласно статье Apple « Mac OS X: Почему ваш Mac не может спать или оставаться в спящем режиме ».

Кроме того, мое тестирование показало, что приоритет потока также влияет на то, будет ли компьютер спать. Следующий код с таймером позволяет компьютеру перейти в спящий режим.

@implementation AppController

-(void)timerFired:(NSTimer *)aTimer
{

}

-(void)spawnThread
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   [NSThread setThreadPriority:0.0];

   [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

   while(1) //Run forever!
   {
      [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:300]];
   }

   [pool drain];
}

-(void)awakeFromNib
{
   [NSThread detachNewThreadSelector:@selector(spawnThread) toTarget:self withObject:nil];
}

@end

Удаление вызова setThreadPriority предотвратит переход компьютера в спящий режим.

2
ответ дан 7 December 2019 в 12:24
поделиться

Вы изучили launchd? http://developer.apple.com/MacOsX/launchd.html

Это - то, что ОС использует для ее собственных сервисов, таким образом, я уверен, что сон был учтен.

0
ответ дан 7 December 2019 в 12:24
поделиться

Я немного смущен, терплю меня.=)

Действие Вашим приложением сбросит таймер автоматического отключения машины, поэтому если задержка между передачами не будет больше, чем период неактивности, машина не заснет. Я не абсолютно уверен, что классифицирует как "действие" по OS X, но если это будет что-нибудь как Linux, то я ожидаю, что сеть или диск IO рассчитали бы, как будет процессы в состоянии выполнения - то есть произведение подсчетов или перестановка данных вокруг в RAM.

Кроме того, в конечном счете система действительно засыпала, Вы ожидаете, что машина для пробуждения так приложения может говорить с удаленным хостом?

1
ответ дан 7 December 2019 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: