2010-04-27 1 views
1

Я немного не уверен в том, как это сделать:Содержите ссылку на NSThread и сообщите ее объекты?

Я запускаю «рабочий поток», который работает в течение срока действия моих приложений «жизнь».

[NSThread detachNewThreadSelector:@selector(updateModel) toTarget:self withObject:nil]; 

затем

- (void) updateModel { 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    BackgroundUpdate *update = [[BackgroundUpdate alloc] initWithTimerInterval:5]; 
    [[NSRunLoop currentRunLoop] run]; //keeps it going 'forever' 
    [update release]; 
    [pool release]; 
} 

Теперь поток "просыпается" каждые 5 секунд (initWithTimerInterval), чтобы увидеть, если есть какие-либо задачи, которые она может сделать. Все задачи в BackGroundUpdate Class зависят только от времени. Я хотел бы иметь несколько, которые были «зависимыми от событий». например Я хотел бы вызвать фоновый объект из моего основного потока и рассказать ему «speedUp», «slowDown», «reset» или любой метод объекта.

Для этого я думаю, мне нужно что-то вроде performSelectorOnThread, но как получить ссылку на NSthread и фоновый объект?

ответ

3

Прямой ответ: вместо + [NSThread detachNewThreadSelector: toTarget: withObject:], используйте [[NSThread alloc] initWithTarget: selector: object:]. Не забудьте позвонить -START!

Другие мысли:

  • Рассмотрите возможность использования NSOperation/NSOperationQueue вместо этого. Легче и эффективнее для большинства потоков рабочих потоков.
  • Рассмотрите, действительно ли вам нужно выполнить эту периодическую проверку на фоновом потоке. Не могли бы вы просто сделать это в цикле основного запуска, а затем сбросить работу на другие потоки по мере необходимости? Темы не являются бесплатными.
  • Учитывайте, является ли опрос наилучшей реализацией. Изучите NSCondition и/или NSConditionLock для более эффективных способов пробуждения потоков, когда что-то происходит (например, добавление работы в очередь), отсутствие опроса.
+0

Спасибо, bdrister. В последнее время я использую NSOperation для многих вещей, это требует немного привыкания, но это действительно окупается. Такой сложный материал, где он может быть оправдан = Подкласс NSoperation, простой одноразовый материал отделяет или выполняетSelector. Еще раз спасибо. – RickiG

 Смежные вопросы

  • Нет связанных вопросов^_^