Простой NSThread или NSTimer

Я хочу запустить определенные фоновые задачи.

Сценарий: я хотел бы, чтобы кнопка активировала поток или таймер, а затем поток/таймер начал повторяться каждую секунду, возвращая NSRunInformationalAlertPanel пользователю с данными.

Это то, что у меня есть для моего таймера:

-(void)workerThread:(NSTimer*) theTimer { 
    if(intNumberOfTicks > 0)
    {
        NSRunInformationalAlertPanel(@"The Serial", [NSString stringWithFormat:@"%d", intNumberOfTicks], @"OK", nil, nil);
        //[txtTimeMinutes setStringValue:[NSString stringWithFormat:@"%d", intNumberOfTicks]];
         intNumberOfTicks--;
    }
    else {
        [timer invalidate];
    }
}

И для запуска метода...

intNumberOfTicks = 5;
timer = [[NSTimer scheduledTimerWithTimeInterval:1 target: self selector:@selector(workerThread:) userInfo:self repeats:true] retain];
        // Or for threading...
///[NSThread detachNewThreadSelector:@selector(workerThread) toTarget:self withObject:nil];

Может ли кто-нибудь помочь мне реализовать то, что мне нужно, возможно, предоставив самые простые примеры для NSThread или NSTimer. Я просмотрел Apple Dev Refrences, но не повезло.


person Sandeep Bansal    schedule 29.05.2011    source источник
comment
Что не работает? Это выглядит правильно, за исключением того, что нет смысла передавать self в качестве аргумента userInfo таймера. О, и вам не нужно сохранять таймер.   -  person jscs    schedule 29.05.2011
comment
NSRunInformationalAlertPanel не отображается, когда код запускается, ничего не выводится на экран   -  person Sandeep Bansal    schedule 30.05.2011


Ответы (1)


Использование NSTimer выполнит селектор в том же потоке, что и тот, который создал и вызвал его.

Если ваша задача должна выполняться в фоновом потоке, попробуйте вызвать метод executeSelectorInBackground:withObject:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelectorInBackground:withObject:

Из этого фонового потока вы можете использовать запланированный таймер так, как вы описали выше.

person Jason Fuerstenberg    schedule 19.04.2012