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

  1. #1
    Membre du Club
    Quand je lance mon application Qt, j'ai 6 threads qui se lancent, ils font quoi ces threads
    bonjour à tous,

    j'ai fait une application de base avec le code QML :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
     
        Rectangle{
            width : parent.width / 2
            height : parent.height /2
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.verticalCenter: parent.verticalCenter
            color : "red"
     
            RotationAnimation on rotation {
                    loops: Animation.Infinite
                    from: 0
                    to: 360
                }
     
            MouseArea{
                anchors.fill : parent
                onClicked{
                      console.log("coucou")
                    controller.boutonRun()
                }
            }
        }
    }


    et quand j' appuie sur le bouton sa lance la méthode boutonRun de l'objet controller qui va juste lancer :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Controller::boutonRun()
    {
        qDebug() << "bouton lancé ! ";
        sleep(5);
    }


    quand je lance le programme j'ai donc un rectangle rouge qui tourne sur lui meme. Ce qui m'interroge c'est le fonctionnement de l'application.

    Quand je fais sur un terminal :
    cat /proc/<pid_de_mon_application>/status | grep Threads

    j'obtiens:
    Threads: 6

    j'ai donc 6 threads qui tourne en parallele juste avec mon application.

    je me suis donc dit naivement qu'au moins 1 thread controlé le code source et un autre l'interface graphique avec mon rectangle rouge, or quand j'appuie sur le bouton, le sleep(5) fige mon interface graphique et le rectangle rouge ne bouge plus pendant 5 secondes donc l'interface graphique et mon code source ne font qu'un, donc juste 1 thread ? et a quoi sert les autres 5 threads ?


    merci d'avance pour votre aide

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

    Bonjour,

    Ce sont certainement des threads interne au fonctionnement de Qt.
    je me suis donc dit naivement qu'au moins 1 thread controlé le code source et un autre l'interface graphique avec mon rectangle rouge, or quand j'appuie sur le bouton, le sleep(5) fige mon interface graphique et le rectangle rouge ne bouge plus pendant 5 secondes donc l'interface graphique et mon code source ne font qu'un, donc juste 1 thread ? et a quoi sert les autres 5 threads ?
    Ils peuvent être synchronisés. Notamment, les cinq threads peuvent attendre de recevoir du travail de la part du thread principal.
    Globalement, votre réflexion n'est pas correcte. D'une part, dire thread de code source n'est pas correct. Votre code source peut être exécuté par un thread (cas classique), ou vous pouvez vous même créer des threads exécutant des sous parties du code source. C'est notamment ce que fais Qt, pour certains points précis de son fonctionnement (j'ose croire, le moteur JS, mais il n'y a pas que ça).
    Avec un débogueur, on peut savoir (plus ou moins) ce que font les threads (ou du moins, où ils en sont, lors de l'arrêt sur un point d'arrêt).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.