Простой NSThread или NSTimer - PullRequest
0 голосов
/ 29 мая 2011

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

Сценарий: я хотел бы, чтобы кнопка активировала поток или таймер, а затем имела бы поток / таймер, чтобы начать повторять каждую секунду, возвращая 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 Refferences, но не повезло.

1 Ответ

0 голосов
/ 19 апреля 2012

Использование 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:

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

...