Affichage en cours de calcul

2»

Réponses

  • schlumschlum Membre
    octobre 2007 modifié #32
    Alors, déjà  y a un truc qu'il faut que tu saches...
    Ici :
    @implementation Test<br /><br />- (IBAction)DisplayOYAImage:(id)sender imageArray:(NSArray *)theArray {<br />	<br />	[NSThread detachNewThreadSelector:@selector(loadImageIntoOYAMatrixThreaded:) <br />							 toTarget:self <br />						   withObject:theArray];<br />	<br />	[self sizeToCells];				// matrix se redimmentonne pour les ascenseurs<br />	[self setNeedsDisplay:YES];			// On rafraichi l&#39;affichage<br />	[self selectCellAtRow:CurrentSelectedRow column:CurrentSelectedColumn];<br />	<br />}
    


    Le code qui est derrière "detachNewThreadSelector" va s'exécuter tout de suite, sans attendre que le thread soit terminé...
    Alors bon, je sais pas trop si c'est ce qui est voulu, mais il faut faire super gaffe à  ces trucs  ;)

    Ensuite, il faut absolument mettre [NSThread exit] à  la fin de la fonction threadée (pour l'autorelease pool, c'est fait, c'est bien :) )

    Je continue à  inspecter :P

    [Edit] Fais gaffe à  éviter les noms de variable avec des majuscules, c'est perturbant... ("NumberOfRows" par exemple)

    [Edit 2] Au lieu de mettre une boucle "while" ( "while(currentImage < nbOfPictures)" ) j'aurais mis une boucle "for" là , question de lisibilité... Mais bon, c'est un détail

    [Edit 3] Pour le reste, faudrait le projet parce que sans, c'est difficile de voir ce qui se passe.
  • GGGG Membre
    20:22 modifié #33
    Voici le projet en entier.




    [Fichier joint supprimé par l'administrateur]
  • schlumschlum Membre
    20:22 modifié #34
    Ah mais oui, il est là  le problème !

    Bon, déjà  le "[NSThread exit];" il faut le mettre à  la fin de ta méthode "DisplayOYAImage" et pas après l'appel de "detachNewThreadSelector", sinon tu vas au devant d'ennuis !

    Ensuite, tu appelles ça :

    [NSThread detachNewThreadSelector:@selector(loadImageIntoOYAMatrixThreaded:) <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  toTarget:self <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  withObject:theArray];<br />	<br />&nbsp; &nbsp; [self sizeToCells];				// PhotoNavMatrix se redimmentonne pour les ascenseurs<br />&nbsp; &nbsp; [self setNeedsDisplay:YES];			// On rafraichi l&#39;affichage<br />	[self selectCellAtRow:CurrentSelectedRow column:CurrentSelectedColumn];
    


    Mais comme je l'ai dit au dessus, il ne va pas attendre d'avoir fait "loadImageIntoOYAMatrixThreaded" avant de faire "sizeToCells" ; il va les faire en parallèle, or "sizeToCells" modifie les dimensions de la vue tandis que loadImageIntoOYAMatrixThreaded les utilise, donc c'est un beau bazar !
  • GGGG Membre
    20:22 modifié #35
    merci beaucoup,
    je viens de faire des modifications et ça roule nickel.
    Il reste une chose :p, si je relance la fonction DisplayOYAImage et que les anciens threads n'ont pas terminés, comment puis je faire pour les stopper ?
  • schlumschlum Membre
    20:22 modifié #36
    C'est un problème plutôt complexe...
    http://forum.macbidouille.com/index.php?showtopic=154181
Connectez-vous ou Inscrivez-vous pour répondre.