IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Attente de fin de fonction : mise en place d'une animation


Sujet :

Qt

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut Attente de fin de fonction : mise en place d'une animation
    Bonjour à tous.

    J'ai développé récemment un petit outil sympa Qt pour ma pomme basé sur RSA. Et je suis tombé sur un petit souci sympa pour ma pomme (bis).
    Voilà le souci: à un moment donné, l'utilisateur doit générer sa clef RSA. Ok, j'ai mis un bouton connecté à un slot, il appuie dessus et le slot génère. Toutefois la génération est "longue". De l'ordre de la minute. Bon c'est pas super long mais quand-même, quand on est habitué à de l'instantané...

    Donc j'aimerais bien mettre dans mon IHM Qt une espèce d'animation style un chrono qui tourne ou un autre truc analogue. Malheureusement la fonction n'est pas sécable. Je ne peux donc pas faire un "phase 1, phase 2, phase 3 etc". Dans les faits, j'appelle la fonction (qui appartient à la lib RSA) et j'attends pendant que mon IHM se freeze. Et quand la fonction se termine ma clef est générée et mon IHM revient. Bref il faudrait que l'animation tourne en parallèle à la fonction.

    Donc à partir de là, j'ai je pense deux possibilités
    1) à base de QTimer qui fait bouger l'animation à chaque timeout()
    2) à base de QThread avec un thread pour générer la clef et un second pour afficher la poupée qui tourne

    Le QTimer ça va, je maitrise bien. En revanche pour le QThread ça va être plus chaud.

    Auriez-vous un avis ?

    Merci à tous

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 533
    Points
    219 533
    Billets dans le blog
    124
    Par défaut
    Bonjour,

    Je pars du principe que votre fonction autour de RSA est bloquante. Vous la lancez et elle ne rend la main qu'à la toute fin. Le QTimer pour cette raison, ne fonctionnera pas, car pour que le QTimer fonctionne (ou pour qu'ils soient déclenchés) le programme doit appeler sa boucle évènementielle (exemple processEvent() même si c'est mal de l'appeler à la main). Du coup, la solution approprié pour ce cas, c'est de passer par un thread (ce qui est relativement simple en Qt, avec un QtConcurrent::run()). Note : c'est la fonction RSA qui doit être exécutée dans un thread, le thread principal continuera de s'occuper de l'UI.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Merci de ta réponse. Désolé du retard, d'habitude je suis plus actif mais ce WE j'ai été un peu débordé.

    T'as tout à fait raison sur la fonction bloquante. A la ligne (par exemple) 150 j'appelle la fonction et la ligne 151 ne s'exécute que qu'après que le travail ait été fait.

    Effectivement le fait que le QTimer ne puisse pas fonctionner par blocage de l'évènementiel (même si je ne savais pas l'exprimer aussi simplement) m'avait aussi effleuré l'esprit.

    Merci du retour. Je vais partir sur QThread. Après-tout, cela semble toujours impossible jusqu'à ce que quelqu'un essaye et y arrive (Mandéla)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise en place d'une note en fin de document
    Par loblique dans le forum Mise en forme
    Réponses: 1
    Dernier message: 21/12/2006, 11h06
  2. [PHP-JS] Mise en place d'une fonction recherche
    Par barbapapa2 dans le forum Langage
    Réponses: 6
    Dernier message: 02/12/2006, 19h03
  3. Mise en place d'une solution Data Guard 9i R2
    Par user_oracle dans le forum Oracle
    Réponses: 4
    Dernier message: 16/02/2005, 10h12
  4. [VB.NET] Mise en place d'une progress bar
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 14
    Dernier message: 19/10/2004, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo