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 :

Pourquoi QTimer rend-il la main ?


Sujet :

Qt

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut Pourquoi QTimer rend-il la main ?
    Bonjour,

    Je crois que tout est dans le titre, mais je vais développer un peu.
    Il y a quelques temps, j'ai du faire un programme qui effectuait un traitement en n étapes.

    Plusieurs options s'offraient alors :

    • Faire un boucle de traitement sur le n étapes
    • Créer un Thread qui effectuait cette même boucle
    • Créer un QTimer lancant n fois un signal


    Je les ai donc réalisées dans l'ordre. La première étape bloquait toute mon application , impossible de cliquer nulle part tant que le traitement n'était pas terminé.
    Le Thread fonctionnait, mais j'ai du m'en séparer suite à un problème que je pensait inhérent au multithreading et à l'accès aux ressources.
    Le QTimer est mit en place et fonctionne parfaitement.

    J'ai plusieurs questions :

    • Pourquoi le QTimer qui n'est pas un Thread, rend t-il la main sur l'application ? En effet, si le temps d'execution du SLOT du Timer est inférieur au temps attribué par ce dernier en chaque envoi de Signal, on peut comprendre qu'on conserve la main sur le programme et que l'on puisse cliquer, etc etc, mais dans le cas inverse, comment se fait-il que l'utilisateur puisse intéragir avec l'application. Le Timer n'est pas sencé utiliser tout le CPU tant que son traitement n'est pas terminé ? Il agi comme s'il effectuait le traitement dans un autre processus et je ne comprends pas :/
    • Dans ce cas là, qu'est-ce qui justifie plus l'utilisation du Timer que du Thread, qu'auriez vous choisi ?


    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Pour répondre rapidement juste au titre : parce que le QTimer ne fait qu'émettre des signaux ce qui ne prend aucun temps. Ces signaux sont placés dans la queue de la boucle d'événements principale, qui les dépile et appelle les slots liés.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Merci pour ta réponse, mais ca n'explique pas pourquoi on récupère la main sur l'application.

    Le traitement inhérent à l'execution des slots dans la boucle d'évènement doit figer l'application durant le temps d'execution, à moins que la boucle d'évènements ne soit exécutée par une autre thread...

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Regarde le dernier argument de la méthode connect() En jouant avec tu devrais trouver un cas où l'application se fige. C'est un début de réponse.

  5. #5
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    Je ne sais pas si tu as déjà lu cet article qui semble coller à ce que tu fais :
    http://qt-quarterly.developpez.com/q...eactivite-ihm/

    Concernant la question, je ne sais pas trop, tu es certain que ta fonction de traitement est assez longue pour être perceptible ? car je suppose que la boucle te rend la main entre chaque exécution du slot.

    Et enfin, je ne sais pas comment tu as essayé d'utiliser les threads, mais il y a plusieurs façons, et la plus simple c'est celle ci :
    http://qt.developpez.com/doc/4.6/pro...n-concurrente/

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Le dernier argument de connect... Je savais même plus qu'il existait lui... Merci !

    Et merci pour les articles, c'est super intéressants ! Je connaissais pas la revue, , jvais aller potasser ca, je mets tout de même en résolu !

Discussions similaires

  1. le Timer ne me rend pas la main
    Par toxycyty dans le forum Windows
    Réponses: 10
    Dernier message: 08/11/2006, 16h54
  2. RMAN ne rend pas la main
    Par big1 dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 29/08/2006, 20h18
  3. [Thread du Swing] Rend-moi la main quand t'as fini!
    Par janef dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/02/2006, 15h51
  4. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00
  5. execl rend-elle la main?
    Par chezjm dans le forum C
    Réponses: 16
    Dernier message: 03/06/2002, 18h28

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