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

Threads & Processus C++ Discussion :

probl�me de cr�ation de thread


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre chevronn�
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par d�faut probl�me de cr�ation de thread
    Bonjour,
    utilisant d'habitude Qt, j'ai voulu tester la gestion des threads de la biblioth�que standard mais j'ai rencontr� un probl�me. Voici un petit programme de test qui met ce probl�me en �vidence:


    source.cpp:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "testThread.h"
    #include <iostream>
     
     
    int main()
    {
        testThread test(5);
     
     
        return 0;
    }
    testThread.h:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #pragma once
    class testThread
    {
    public:
        testThread(int param);
     
    private:
        void runThread();
        int itr;
    };
    testThread.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 <thread>
    #include <iostream>
    #include "testThread.h"
     
    testThread::testThread(int param):itr(param)
    {
        std::thread myThread(&testThread::runThread, this);
    }
     
    void testThread::runThread()
    {
        for (int i = 0; i < itr; i++)
            std::cout << "hello" << std::endl;
    }
    La classe testThread lance donc un thread qui affiche hello autant de fois que la valeur du param�tre pass� lors de son instanciation.


    Cependant, m�me si l'affichage final est correct, j'obtiens le message d'erreur joint en mode debug:

    En mode release, le programme crashe.


    Je travaille avec visual studio 2013.


    merci � ceux qui prendront le temps de lire ce message et pourront m'apporter une solution.
    Images attach�es Images attach�es  

  2. #2
    Membre chevronn�
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par d�faut
    Honte � moi.
    C'est juste que le programme se terminait avant le thread.

  3. #3
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Salut,

    tu as trouv� ton erreur, mais il y a � redire sur ton code.
    Le plus important est que si ta classe est sens� encapsuler un thread, il faudrait que le thread soit en variable membre.
    L� tu cr�es un thread que tu ne contr�les absolument plus d�s la sortie du constructeur.
    Ca te permettrait de pouvoir le join pour que le programme s'arr�te proprement.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  4. #4
    Membre chevronn�
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par d�faut
    Merci pour tes remarques, je suis toujours preneur.

    En fait c'�tait juste une version minimale pour mettre le probl�me en �vidence. la version que j'utilise finalement ressemblera plut�t � ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "testThread.h"
    #include <iostream>
     
    int main()
    {
        testThread test(5);
        test.start();
        test.wait();
     
        return 0;
    }
    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
    #pragma once
    #include <thread>
     
    class testThread
    {
    public:
        testThread(int param);
        void start();
        void wait();
     
    private:
        std::thread myThread;
        int itr;
     
        void runThread();
    };
    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
    #include <iostream>
    #include "testThread.h"
     
    testThread::testThread(int param):itr(param)
    {
    }
     
    void testThread::runThread()
    {
        for (int i = 0; i < itr; i++)
            std::cout << "hello" << std::endl;
    }
     
    void testThread::start()
    {
        myThread = std::thread(&testThread::runThread, this); // Lance le thread
    }
     
     
    void testThread::wait()
    {
        if (myThread.joinable())
            myThread.join();
    }
    C� te semble coh�rent?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me de cr�ation de thread
    Par [Silk] dans le forum Langage
    R�ponses: 2
    Dernier message: 31/01/2006, 21h58
  2. R�ponses: 7
    Dernier message: 16/06/2004, 15h02
  3. Probl�me de cr�ation de table sous MySql
    Par ducamba dans le forum Requ�tes
    R�ponses: 2
    Dernier message: 21/06/2003, 09h59
  4. Probl�me de cr�ation de fen�tre
    Par tomateauketchup dans le forum DirectX
    R�ponses: 1
    Dernier message: 08/06/2003, 19h42
  5. R�ponses: 2
    Dernier message: 24/05/2003, 00h07

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