Comment annuler/sortir/annuler l'exécution d'un Thread objet ou d'un thread en cours d'exécution en arrière-plan dans IOS
J'détacher Le fil comme indiqué ci-dessous pour faire une opération en arrière-plan
currentThread = [[NSThread alloc]initWithTarget:contactServiceselector:@selector(requestForContactBackup:)object:msisdn];
[currentThread start];
Ce currentThread est le pointeur de AppDelegate.
J'ai un bouton sur mon point de vue et quand je presse, je tiens à annuler ou arrêter l'exécution d'un thread d'arrière-plan.
Pour Ce faire quelque chose comme ceci:
-(void)cancelTheRunningTasks {
if(self.currentThread !=nil) {
[currentThread cancel];
NSLog(@"IsCancelled: %d",[currentThread isCancelled]); //here Yes returns
[self removeNetworkIndicatorInView:backUpViewController.view];
}
}
Problème avec le thread d'arrière-plan est toujours en cours d'exécution.
Avec mon fils refrence comment annuler/arrêt d'exécution/de tuer le thread d'arrière-plan de thread principal ?
veuillez vous reporter certaines solutions.
Merci.
Après [currentThread annuler]; cette ligne, essayez par l'ajout d'une ligne currentThread=nil;
Que ferons rien.
Que ferons rien.
OriginalL'auteur iDevAmit | 2013-03-14
Vous devez vous connecter pour publier un commentaire.
annuler
Modifications de l'annulation de l'état du récepteur pour indiquer qu'il doit quitter.
sortie
Termine le thread courant.
Vérifier NSThread De Référence De Classe
Pour plus d'informations sur l'annulation et le fonctionnement des objets, voir NSOperation De Référence De Classe.
Note: Dans OS X v10.6, le comportement de la méthode d'annulation varie selon que l'opération est actuellement dans une file d'attente des opérations. Pour désactivé les opérations, cette méthode marques que l'opération est terminée immédiatement, la génération de la approprié KVO notifications. Pour en file d'attente des opérations, il marque simplement l'opération de prêt à exécuter et permet à la file d'attente d'appel de sa méthode de démarrage, qui, par la suite les sorties et les résultats dans la clairière de l'opération à partir de la file d'attente.
la sortie est de la méthode de classe. vous ne pouvez pas appeler [yourThread exit];
OriginalL'auteur Rajneesh071
Votre thread d'arrière-plan doit vérifier pour voir si elle a été annulée, soit par le biais de la
isCancelled
méthode...Vous ne pouvez pas tuer le thread de l'extérieur car il n'y a aucun moyen de savoir dans quel état le thread peut être et, ainsi, de le tuer serait de produire indéterminée comportement (imaginez si le thread a été la tenue d'un mutex dans l'allocateur quand il a été tué... ouch).
OriginalL'auteur bbum
J'ai résolu le Problème. Exactement ce que j'étais voulez faire ce que je veux arrêter ou tuer les conditions de travail de certains thread d'arrière-plan de mon Thread principal ou à un autre thread. Comme je l'ai lu la documentation d'Apple et de certains postes, j'en ai conclu que nous ne pouvons pas tuer un thread d'autres thread parce qu'ils sont tous fils d'actions ordinaires de la mémoire de l'espace et des ressources et il n'est pas mieux pour tuer le fil par un autre thread (Mais un processus peut tuer l'autre parce que pas de mémoire commune de l'espace d'actions entre deux processus).
Puis j'ai eu l'info nous ne pouvons pas quitter/thread kill comme ça, mais quand même, on peut définir la propriété annuler le thread en cours d'exécution à partir d'autres fil. (Dans le code où l'utilisateur a demandé à annuler des Tâches).
Donc, ici, nous pouvons définir annuler propriété. Et à l'intérieur de notre arrière-plan code de la tâche qui est en cours, il suffit de vérifier si annuler la propriété est définie ou non. (nous avons besoin de surveiller après un morceau de l'exécution de code). Si annuler propriété est définie/Oui alors appel [Thread quitter] dans ce thread d'arrière-plan du code et de libérer toute la mémoire allouée par ce thread pour protéger des fuites de mémoire (autorelease pool ne prendra pas en charge ici pour libérer les ressources).
C'est Comment j'ai résolu le problème.
En simple --> il suffit de définir la propriété de la tâche particulière u souhaitez annuler l'annulation d'ensemble. (méthode pour définir annuler seront à l'appel de l'objet thread de référence).
Et la surveillance dans votre code pour annuler la propriété. Si bien ensemble, puis quitter le fil.
Si quelqu'un a une meilleure solution pour cela, veuillez vous référer. Sinon Il fonctionne également très bien.
OriginalL'auteur iDevAmit