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

Visual C++ Discussion :

MultiThreading sous vc++ 2005


Sujet :

Visual C++

  1. #1
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut MultiThreading sous vc++ 2005
    Slt, bon j'ai un petit souci avec un programme en multithread que je veut réaliser, avant j'utilisé sous vc++ 6 la class CWinThread avec le MFC, pour faire ce genre d'application.

    class maclass:: public CWinThread{ ....};

    Récemment je suis passé à vc++ 2005 et j'utilise des Application windows forms (CLR), mais j'arrive pas à utiliser cet classe (je ne peut utilisé AfxWin.h)

    J'ai trouver une autre class:

    System::Threading::Thread

    Mais elle ne marche qu'à l'interieur du code de la forme. Ce que je veut c'est crée une ma propre class robot, qui simule plusieur robots dans un environnement agissant en parallele.

    Genre :

    robot robot1,robot2,robot3;

    robot1.run();
    robot2.run(); //en parallele
    robot3.run();

    Svp: Je veut evitez les fameux _beginthread, _beginthreadex

    Merci d'avance, j'attend vos conseilles.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Boost.thread ?

  3. #3
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Svp, pas de librairi d'autrui,
    je ne veut utiliser que du standard vc++
    je ne veut pas dépendre d'autre librairi (licences, bugs ...) à part de mon langage. Merci

  4. #4
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par zintelix3d Voir le message
    Svp, pas de librairi d'autrui,
    je ne veut utiliser que du standard vc++
    je ne veut pas dépendre d'autre librairi (licences, bugs ...) à part de mon langage. Merci
    (VC++ est un standard? )

    La licence Boost ne te convient pas?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    (licences, bugs ...)
    à choisir sur ces critères, je prend boost

  6. #6
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Loin de moi l'idée de dir que boost c'est pas bien , Je suis sure que c'est une très bonne librairi, mais ce que je veut c'est apprendre comment faire un programme multi-threading en vc++ 2005 sans passer par le téléchargement d'une librairie externe, en utilisant rien que ce qui est dans le vc++ 2005.

    Merci

    Quand je dit utiliser du standard vc++ je parle de n'utiliser que les fonction standard du vc++ je ne dit pas que vc++ est un standard

  7. #7
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Slt , pas de proposition?

    Je vais peut être opté pour _beginthread , s'il n'y a rien, bon, j'attend encore vos proposition, s'il y ont a ,

    Merci

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Sous .Net, tu dois utiliser la classe System::Threading::Thread.

  9. #9
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Sous .Net, tu dois utiliser la classe System::Threading::Thread.
    Voila on mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class maclass{
       System::Threading::Thread  monthread;
     
     ...
    };
    J'ai droit à :

    error C3265: impossible de déclarer 'monthread' managé dans 'maclass' non managé impossible de déclarer une variable globale ou statique, ou un membre d'un type natif faisant référence à des objets du tas gc

    error C3076: 'maclass::monthread' : vous ne pouvez pas incorporer une instance d'un type référence, 'System::Threading::Thread', dans un type natif

    on mettant
    class ref maclass

    le reste du code cause une erreur je voit si je ne peut pas sortir le thread de la declaration de la class

    Merci

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Pour utiliser une classe managée dans une classe non-managée d'un programme CLR, on utilise gcroot<>

  11. #11
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pour utiliser une classe managée dans une classe non-managée d'un programme CLR, on utilise gcroot<>
    Super la sa marche pour la declaration, faudra que tu me montre d'où tu tire la documentation (c'est pas facile de passer de MSvc++ 6 à MSvc++ 2005).

    J'ai presque honte de dire qu'on faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <vcclr.h>
    using namespace System::Threading;
     
    class maclass
    {
    	gcroot<Thread^> *monthread;
     ...}
    J'arrive pas à initialiser mon thread:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void mafonction()
    {
    ....
    }
     
    maclass::maclass()
    {
        monthread=gcnew Thread(gcnew ThreadStart(mafonction));
    }
    L'autre problème est qu'on diré que c'est interdit de faire reference à une fonction mombre de la class genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void maclass::mafonction()
    {
    ....
    }
    
    maclass::maclass()
    {
        monthread=gcnew Thread(gcnew ThreadStart(mafonction));
    }
    Si qq1 à une idée

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Il ne s'agit pas ici de passer de VC6 à VC++ 2005, il s'agit de passer de programmation native à programmation CLR (puisque tu as fait le choix de faire une application CLR).

    Il me semble que tu peux faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class maClass
    {
    	gcroot< Thread^ > monThread;
    	static void mafonction(Object^ obj); //Je ne sais pas si ce genre de truc marche dans une classe non-managée, par contre)
    };
     
    maClass::maClass()
    {
    	monThread = gcnew Thread(gcnew ParameterizedThreadStart(mafonction));
    }
    Et au moment voulu, tu appelles sa méthode Start()...

  13. #13
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    ...
    maClass::maClass()
    {
    monThread = gcnew Thread(gcnew ParameterizedThreadStart(mafonction));
    }
    [/CODE]
    Et au moment voulu, tu appelles sa méthode Start()...
    J'ai une erreur pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monThread = gcnew Thread(gcnew ParameterizedThreadStart(mafonction));
    error C2440: '=' : impossible de convertir de 'System::Threading::Thread ^' en 'gcroot<T> *'
    1> with
    1> [
    1> T=System::Threading::Thread ^
    1> ]
    1> Aucun opérateur de conversion défini par l'utilisateur disponible, ou
    1> Impossible de convertir un type managé en type non managé
    Le problème en utilisant static avec les fonction membre d'une classe est que cette fonction ne peut plus accèder au variable interne de las class et agis donc comme une fonction externe à cette class, mais bon S'il y a d'autres propositions.

    Demande de conseil au près de Médinoc, Ne pensez vous pas que d'utiliser des fonctions comme _beginthread qu'on trouve dans plusieurs compilateur c++, serrai meilleur pour la portabilité de mon source

    Merci a+

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Vire l'étoile dans la déclaration de monthread.

    Je ne sais plus si _beginthread est vraiment conseillé quand on utilise le framework .Net autour.
    Je pense que le plus simple serait de faire une classe managée intermédiaire qui contiendrait le pointeur vers un objet de type maClass et appellerait la fonctin maFonction dans sa procédure de thread...

  15. #15
    Membre habitué Avatar de zintelix3d
    Inscrit en
    Décembre 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2007
    Messages : 171
    Points : 137
    Points
    137
    Par défaut
    Merci Médinoc maintenant sa marche très bien

    J'essai d'adapter tout sa, pour que sa marche avec mon code
    Je cherche comme passer un argument de type Object à ma fonction

    J'arrive pas à faire un cast d'une

    Struct (qui contien mes argument) -> Object^

    Je vous tien au courant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment importer un activeX sous delphi 2005
    Par Akim13 dans le forum EDI
    Réponses: 1
    Dernier message: 08/09/2005, 21h08
  2. [Visual 2005] Dacris et NETXP sous visual 2005
    Par Dinytro dans le forum Windows Forms
    Réponses: 5
    Dernier message: 06/09/2005, 12h30
  3. Installer Firefox sous Mandriva 2005
    Par ced dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 05/09/2005, 14h36
  4. Problème avec EInOutError sous delphi 2005
    Par Teb dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2005, 11h48
  5. Multithreading sous HP Ux 11
    Par pykoon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/10/2002, 23h36

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