Thread pour patienter

Philippe49Philippe49 Membre
06:08 modifié dans API AppKit #1
Au lancement de mon application, j'ai une interface un peu lourde à  charger, et en même temps j'ai une question à  poser à  l'utilisateur. Vous feriez comment ?
2 threads (mainthread avec le dialogue utilisateur+chargement) , 3 threads (mainthread+chargement+dialogue utilisateur) ?

Réponses

  • schlumschlum Membre
    06:08 modifié #2
    Je ne vois pas l'intérêt d'une 3e thread... Pour faire quoi ?

    La main thread demande le chargement dans un autre thread, puis affiche la question, puis splashscreen (éventuellement) ou interface avec une roue...
  • Philippe49Philippe49 Membre
    06:08 modifié #3
    Oui, mais il faut que le mainthread soit averti que le changement est terminé avant de faire le flush ... Il faut que je fasse attendre le thread secondaire si l'utilisateur est trop lent à  se décider, ou il faut que le chargement se termine si l'utilisateur est trop rapide.

    Concrètement, mon chargement est celui d'un nib, et le choix de l'utilisateur c'est rentrer son nom/prendre le précédent pour le jeu 
  • schlumschlum Membre
    06:08 modifié #4
    Euh... Moi j'éviterais de charger un .nib dans un thread secondaire déjà .
  • Philippe49Philippe49 Membre
    06:08 modifié #5
    Je vais t'horrifier encore plus : je charge aussi un nib pour le dialogue avec l'utilisateur  :)  ::)

    Pour l'instant, je suis sur le schéma de 3 threads, et à  la fin de chaque thread je fais un performSelectorOnMainThread vers une méthode dans laquelle je fais un compte à  rebours des threads pour finir par le flush. Si il y a mieux, je suis preneur.
  • schlumschlum Membre
    06:08 modifié #6
    Mais il est si long que ça à  charger ce nib ?
    Les splashscreen sont faits pour ça  :P
  • Philippe49Philippe49 Membre
    06:08 modifié #7
    Non , il doit prendre 2 à  3 secondes, mais comme le joueur a aussi à  se déclarer en même temps, j'essaie de perfectionner le machin.

    Qu'est-ce que tu appelles splash screen ? 
  • schlumschlum Membre
    06:08 modifié #8
    Tu appelles "initWithWindowNibName" dans un autre thread ?

    Le splash screen c'est l'image qui s'affiche pendant le chargement de l'interface qu'on voit dans de nombreux logiciels.
  • Philippe49Philippe49 Membre
    06:08 modifié #9
    Je faisais donc un splash screen sans le savoir, et sur cet écran d'accueil, je demande au joueur de se dénoncer en lui présentant une TableView de choix et un TextField pour se rajouter.
    J'ai donc un chargement du xib du dialogue avec le joueur (immédiat), et un chargement en parallèle de l'interface du jeu qui lui prend 2ou 3 secondes. (C'est sur iPhone , il y a une seule fenêtre, la présentation modale serait moche)
  • schlumschlum Membre
    avril 2009 modifié #10
    En admettant qu'on puisse charger un nib sans problème dans un autre thread, je ne vois toujours pas l'utilité d'un 3e thread  :P

    * Main thread
    - Commence sa runloop
    - Affiche le panneau pour l'utilisateur
    - Une fois terminé, attends (éventuellement) le chargement avec un indicateur sur le panneau pour l'utilisateur (mais la main runloop tourne toujours)

    * Second thread
    - Charge le .nib
    - Attends (éventuellement) que l'utilisateur ait fini son choix (avec un while et des sleep)
    - Demande à  la main thread d'arrêter l'indicateur, de cacher le panneau pour l'utilisateur et de lancer l'interface principale
  • Philippe49Philippe49 Membre
    06:08 modifié #11
    Oui dit comme ça . Bon je le termine à  3 threads, et je le passerai sans doute à  2 ensuite.  :o
  • Philippe49Philippe49 Membre
    06:08 modifié #12
    La méthode de Schlum confirmée   
Connectez-vous ou Inscrivez-vous pour répondre.