Objectif C + comment créer un nouveau fil de discussion et poster des messages
J'ai de la difficulté de la création d'un nouveau thread en C Objectif
- (void) create
{
NSLog( @"Hello World from create \n" );
NSThread* evtThread = [ [NSThread alloc] initWithTarget:self
selector:@selector( saySomething )
object:nil ];
[ evtThread start ];
}
- (void) saySomething
{
//NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
printf( "Hello world from new thread \n");
NSLog( @"Hello World from new thread \n" );
//[pool release];
}
Mais il semble que la méthode saySomething n'est pas appelée. Rien n'est imprimé dans la console.
- Êtes-vous sûr? Définissez un point d'arrêt sur l'appel à NSLog. Vous savez si il appelé, et sur le thread.
- J'ai fait comme vous l'avez suggéré. J'ai mis le point d'arrêt sur NSLog mais il n'est pas sur le point d'arrêt à tous.
- Jetez un oeil à la réponse par @zoul
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que vous voulez explicite thread de contrôle? Plus que probablement vous n'avez pas. Que diriez-GCD?
Comme pour votre problème, si vous utilisez un ARC, le thread sera probablement publié à droite après le retour de
create
, de sorte qu'il n'a pas eu la chance d'effectuer la sélection. Vous devez stocker le fil dans unstrong
variable d'instance ou quelque chose comme ça.NSLog
il y a peu de différence. J'ai été en supposant qu'il veut faire quelque chose qui prend plus de temps, sinon il n'y aurait pas d'intérêt dans la création d'un thread supplémentaire.performSelectorInBackground
devrait être encore plus facile que de courir le fil à la main. Si elle est disponible sur 10.5, ce qui est.Essayez de démarrer un thread de cette façon:
Je vous remercie pour vos réponses. Cela aurait pu être une fausse alarme. En dehors de toutes les erreurs dans le code, je pense que l'échantillon lui-même n'était pas correcte. Immédiatement après la méthode de création de " l'application se ferme, donc il na pas le temps de l'impression des trucs dans le nouveau thread.
Voici ce que j'ai fait. J'ai copié le code à partir de ce lien
http://softpixel.com/~cwright/programming/threads/threads.cocoa.php
et il a bien fonctionné. Dès que j'ai enlevé le 'pour les boucles" et mis dans des instructions d'impression, il n'y a pas de sortie dans le nouveau thread. J'ai donc ajouté dans un sommeil, et maintenant je vois les messages du fil. Voici le nouveau code.
Cela me donne la suite de la sortie.
Si j'en commentaire le sommeil puis-je obtenir la sortie suivante.
Grâce
Je suis d'accord que l'utilisation de dispatch_async() ou performSelectorInBackground sont probablement ce que vous voulez. Cependant, au point d'pourquoi ne pas votre code de produire une sortie, la signature de la méthode doit avoir un et un seul argument. Changement de la méthode de
et de changer le sélecteur de
", Le sélecteur pour le message à envoyer à la cible. Ce sélecteur doit prendre qu'un seul argument et ne doit pas avoir une valeur de retour." -NSThread Docs
S'il vous plaît essayer dans de la manière suivante.