comment fonctionne Qt avec l'interface graphique

a marqué ce sujet comme résolu.

Bonjour,

voila j’ai une application classique avec tres peu de code, je vous montre le main.qml :

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 lors de l’appui sur le bouton, ca lance la méthode :

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 classique.

je me suis donc dit naivement qu’au moins 1 thread controlait le code source et un autre thread controlé l’interface graphique avec mon rectangle rouge, or quand j’appuie sur le bouton, le sleep(5) fige mon interface graphique et par conséquent 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

Tu peux mettre un breakpoint dans ta fonction boutonRun (franglais ? Pourquoi pas buttonRun ouboutonExecuter ?) et regarder les call stacks des différents threads.

Mais je pense que c’est juste un thread pool, un ensemble de threads qui sont pré-créés pour éviter de prendre du temps au moment où l’application en a besoin. Qt thread régulièrement des tâches en arrière plan, comme le réseau.

+0 -0

merci de ta réponse!

dsl mais je ne connais pas bien les threads pool, j’aurais dans mon processus 6 threads qui tournerait dont 1 qui est mon thread principal avec l’interface graphique, et les autres ne ferait rien mais pourrait des fois etre utilisé en fonction de ce que j’utilise dans mon code ?

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte