2011-05-17 5 views
1

J'ai quelques fonctions que j'ai besoin d'appeler quand j'appuie sur un bouton. J'utilise [self getamountofdatacenters]; pour appeler ces fonctions. Lorsque j'appuie sur le bouton, le simulateur est bloqué jusqu'à ce que sa fait avec toutes les fonctions, et cela prend 5-7 secondes, donc je suis en train d'utiliser NSThread:Pour savoir quand un NSThread est terminé

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

que je fais cela trois fois avec différentes fonctions, mais je veux savoir quel est le progrès d'un NSThread et de l'attraper quand c'est fait. Comment puis-je faire ceci? Je vous remercie.

Répondre

3

Oublier les discussions explicites et utiliser GCD:

dispatch_async(dispatch_get_global_queue(0, NULL), ^{ 
    [self getNumberOfDataCenters]; 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
     // The work is done, do whatever you need. 
     // This code is executed on the main thread, 
     // so that you can update the UI. 
    }); 
}); 
+1

merci beaucoup! ça fonctionne bien maintenant – Oblieapps

0

Une option consiste à "capturer" la fin de l'exécution d'un thread au niveau de l'application: dans le code que vous publiez dans un thread alternatif, déclenchez un NSNotification juste comme il se termine. Dans le thread principal, vous observez cette notification et réagissez en conséquence.

Vous pouvez également inspecter l'état d'un thread en utilisant -isExecuting, -isFinished et -isCancelled.

+0

Comment puis-je savoir quand il complète? dois-je appeler un NSNotification à la fin d'une fonction qui im ​​appelle?, et comment puis-je l'observer? pourriez-vous me montrer un exemple? Je l'apprécierais vraiment! – Oblieapps

Questions connexes