2009-11-18 4 views
0

Je dois démarrer plusieurs processus simultanément - un jeu AVAudioPlayer, une minuterie et une opération d'écriture de fichier.iPhone - démarrer deux processus simultanément

Si je les écris simplement dans une méthode, ils sont exécutés l'un après l'autre et le début de toutes les opérations a un léger décalage.

Des idées? Appréciez toute aide.

Merci.

Répondre

2

Pourquoi n'utilisez-vous pas de threads?

Vous pouvez le faire facilement en utilisant:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 

ou en utilisant NSOperation avec un NSOperationQueue. Pour plus de détails, consultez this question.

Notes:

  • vous aurez besoin d'une piscine autorelease dans votre fil si vous utilisez toutes les classes autoreleased
  • si vous souhaitez utiliser une minuterie dans un autre thread, vous aurez également besoin d'un autre runloop.
  • attention à la sécurité des threads. Par exemple, je ne sais pas si AVAudioPlayer peut être utilisé sur un thread différent du thread principal.
  • Je ne pense pas que vous pouvez planifier un NSTimer à partir d'un NSOperation
+2

Si vous ne le faites qu'une seule fois, performSelectorInBackground est le code le plus simple. Cependant, si vous le faites beaucoup, ce n'est pas optimal. Je suggère la route NSOperation. –

+0

Merci beaucoup les gars. – lostInTransit

1

Ajout trop pourrait être la concurrence mauvaise approche ici. Vous souhaiterez peut-être étudier la configuration de la minuterie et la lecture du fichier audio sur le thread principal tout en effectuant l'appel d'écriture de fichier bloquant sur un thread d'arrière-plan. Le concept important ici est de ne pas bloquer les appels sur le thread principal, en particulier lorsqu'il s'agit d'E/S de fichiers ou de réseaux.

Vous devez éviter de créer trop de threads supplémentaires car l'iPhone est un périphérique à processeur unique, et plusieurs threads entraîneront une consommation plus importante de ressources.

Questions connexes