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 confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Par d�faut
    Boost.thread ?

  3. #3
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Membre chevronn�
    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
    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 �m�rite
    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
    Par d�faut
    (licences, bugs ...)
    � choisir sur ces crit�res, je prend boost

  6. #6
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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 confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Sous .Net, tu dois utiliser la classe System::Threading::Thread.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Pour utiliser une classe manag�e dans une classe non-manag�e d'un programme CLR, on utilise gcroot<>
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre confirm� Avatar de zintelix3d
    Inscrit en
    D�cembre 2007
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 171
    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