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

Multithreading Discussion :

Simple utilisation de thread


Sujet :

Multithreading

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Simple utilisation de thread
    Bonjour,

    Je pense que ma question est assez simple à rédoudre mais elle met vraiment problématique donc je remercie ceux qui prendrons le temps de m'aider.

    Dans ma quete d'apprentissage de Qt j'en suis au point du multithreading (j'en suis rendu là à cause du "ne repond pas" que j'ai cherché à résoudre) et là ça bloque, je comprends le fonctionnement global et l'utilisation mais au niveau de l'application concrète je n'y arrive pas en utilisant Qt Creator de mon coté.

    ET ceux malgrès les exemples que j'ai pu trouver sur internet ou sur ce forum à ce sujet.

    Je vais vous exposer où j'en suis afin que vous puissiez comprendre.
    Ici je vais faire un projet très simple à titre d'exemple pour faire appel à un thread en utilisant les sigaux/slots.

    J'ai donc un projet contenant un label, deux boutons "start" et "stop" :
    Une fois que le bouton Start est pressé, un label va venir afficher un nombre de plus en plus important, jusqu'à ce que l'on presse le bouton "Stop"

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <QApplication>
    #include "MainWindow.h"
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        MainWindow form;
        form.show();
     
        return app.exec();
    }
    MainWindow.h
    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
    #ifndef COUROCR_H
    #define COUROCR_H
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QLabel>
    #include <QThread>
     
    class MainWindow : public QWidget
    {
        Q_OBJECT
     
        public:
        MainWindow();
        QPushButton *m_boutonLancement;
        QPushButton *m_boutonStop;
        QLabel *m_texte;
     
        public slots:
        void lancementThread();
        void arretThread();
     
    };
     
    #endif
    MainWindow.cpp
    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
    29
    30
    31
    32
    #include "mythread.h"
    #include "MainWindow.h"
    #include <QThread>
     
    void MainWindow::lancementThread()
    {
        //Le but serait le lancement du thread
    }
     
    void MainWindow::arretThread()
    {
        //Le but serait l'arret du thread
    }
     
     
     
    MainWindow::MainWindow() : QWidget()
    {
     
        m_boutonLancement = new QPushButton("Start", this);
        m_boutonLancement->move(50, 20);
     
        m_boutonStop = new QPushButton("Stop", this);
        m_boutonStop->move(100, 50);
     
        m_texte = new QLabel("0",this);
        m_texte->setGeometry(50, 100, 180, 70);
     
     
        connect(m_boutonLancement, SIGNAL(pressed()), this, SLOT(lancementThread()));
        connect(m_boutonStop, SIGNAL(pressed()), this, SLOT(arretThread()));
    }
    Afin de me facilier la tache j'ai tenté de faire une nouvelle classe responsable du thread :

    MyThread.h
    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
     
    #ifndef MYTHREAD_H
    #define MYTHREAD_H
     
    #include <QThread>
     
    class MyThread : public QThread
    {
         Q_OBJECT
     
    public:
        MyThread();
     
    public slots:
        void stop();
        void run();
    };
     
    #endif // MYTHREAD_H
    MyThread.cpp
    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
     
    #include "mythread.h"
     
    MyThread::MyThread()
    {
     
    }
     
     
    void MyThread::run(){
     
     
        for (int i = 0; i< 100000 ;i++){
     
            QString qNombre = QString::number(i);
     
            //Ici on vient ajouter 1 au label crée dans le MainWindow
            m_boutonLancement->setText(qNombre);
     
        }
     
    }

    Je ne pense pas utiliser cela correctement pour les threads et je ne vois pas non plus comment venir fermer un thread en utilisant une sous classe comme ici.

    Merci beaucoup à ceux qui prendront le temps de m'aider.

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Bonjour,

    Pour arrêter un thread, personnellement nous passons un booleans à la fonction stop, et on vérifie son état lors de la boucle:

    Rapidement et sans tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class MyThread : public QThread
    {
         Q_OBJECT
     
         _stopRequested {false};
     
    public:
        MyThread();
     
    public slots:
        void stop();
        void run();
    };
    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
     
    void MyThread::stop(){
        _stopRequested  = true;
    }
     
    void MyThread::run(){
     
     
        for (int i = 0; i< 100000 ;i++){
            if(_stopRequested)
                break;
     
            QString qNombre = QString::number(i);
     
            //Ici on vient ajouter 1 au label crée dans le MainWindow
            m_boutonLancement->setText(qNombre);
     
        }
     
    }
     
     
    Je ne pense pas utili

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Salut, deja merci pour ton aide PadawanDuDelphi, je comprends comment tu fais cela et je pense que je vais faire exactement pareil ça me semble etre une bonne solution.

    Mais mon problème "principal" est que je ne sais pas comment faire fonctionner le thread
    Dans le projet exemple que je donne plus haut je ne sais pas comment lancer le thread dans MainWindow.cpp.

    Merci encore pour ton aide.

Discussions similaires

  1. [VBA] utilisation de thread
    Par nemesys971 dans le forum VBA Access
    Réponses: 19
    Dernier message: 10/10/2008, 10h49
  2. [EasyPHP] un debugger simple à utiliser, ça existe?
    Par sam01 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 23/02/2006, 10h11
  3. Utilisation des threads
    Par Valinor dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2005, 16h41
  4. Utilisations des Threads
    Par phoenix440 dans le forum Réseau
    Réponses: 15
    Dernier message: 21/08/2005, 17h19
  5. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13

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