2010-09-16 4 views
0

Pendant que je fais d'habitude l'utilisation de NSOperation pour avoir un fil faire une tâche courte/opération, je voudrais avoir un fil dédié longue durée de vie qui est toujours disponible pour traiter certaines opérations. Pour cela, j'Alloue une nouvelle NSThread et utilise la méthode initWithTarget:Une bonne façon de commencer/continuer runloop

- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 

Ma compréhension est le sélecteur passé en devrait être la méthode principale du fil qui est responsable pour le démarrage du runloop. Quel est le bon code à avoir ici?

est une boucle while comme celui-ci ... approprié

(void)newThreadMainMethod { 
    while(1) { 
     [[NSThread currentThread] run]; 
    } 
} 

ou est-il un moyen de faire plus efficace pour que le fil ne prend pas des ressources avec une boucle sans fin? Je pensais à une minuterie qui s'éveillerait toutes les 0,5 secondes et j'appellerais courir sur le fil au cas où quelque chose de nouveau serait disponible pour travailler. J'apprécierais votre contribution.

Merci.

+0

Je ferais certainement un profil pour m'assurer que c'est en fait plus rapide que NSOperation, parce qu'il semble assez probable que NSOperationQueue fasse déjà ce dont vous parlez. – Chuck

Répondre

2

[[NSRunLoop currentRunLoop] run] est ce que vous voulez, mais il continuera à jamais si vous avez seulement besoin d'appeler une fois (et non dans une boucle). Vous pouvez:

  • font que, se terminant le fil à l'intérieur de la boucle d'exécution lorsque/le cas échéant
  • utilisation [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: JIFFY_TIME] et scrutin pour une condition de sortie dans une boucle while() comme vous avez écrit.
+0

D'après mon expérience, l'exécution de l'appel entraînera l'arrêt de NSThread si rien n'a encore été placé sur le thread. Est-ce que le seul moyen de le maintenir en vie en mettant une boucle en boucle avec une condition? – Paul

+0

Si vous en avez besoin pour rester, ajoutez une source. –

+0

J'ai lu des sources ... Pouvez-vous me donner un exemple comment ajouter une source? – Paul

Questions connexes