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

C++/CLI Discussion :

Native, Managed et Threads


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 11
    Par d�faut Native, Managed et Threads
    Bonsoir,

    J'ai longtemps h�sit� avant de poster.
    Je ne suis pas du genre � me plaindre ("J'y arrive pas, aidez moi !") mais un peu d'aide ne serait pas de trop...

    Avant de poser mon poser mon probl�me, je pr�cise que j'utilise Visual Studio 2005 pour un projet Windows Form.

    J'ai une partie de mon code qui est du C++ classique ('Native') et le retse, une IHM Windows Form ('Managed').

    Dans le code 'native', j'ai un thread qui tourne.

    Mon but est d'appeller une fonction de l'IHM (pour mettre � jour du texte par exemple) depuis le thread.

    Mon code est simple :

    Form1.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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #pragma once
    #include "ClasseC\ClasseC.h"
     
    namespace IHM_Test
    {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
     
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    		public:
    			Form1(void)
    			{
    				InitializeComponent();
    				maClasse = new ClasseC();
    			}
    			int toto()
    			{
    				blabla->Text = maClasse->DonnerA().ToString();
    				return 0;
    			}
     
    		protected:
    			static ClasseC * maClasse;
     
    			~Form1()
    			{
    				if (components)
    				{
    					delete components;
    				}
     
    				delete maClasse;
    			}
     
    		private:
    			System::ComponentModel::Container ^components;
    			System::Windows::Forms::TextBox^  blabla;
     
     
    		#pragma region Windows Form Designer generated code
    				void InitializeComponent(void)
    				{
    					this->blabla = (gcnew System::Windows::Forms::TextBox());
    					this->SuspendLayout();
    					// 
    					// blabla
    					// 
    					this->blabla->Location = System::Drawing::Point(22, 21);
    					this->blabla->Name = L"blabla";
    					this->blabla->Size = System::Drawing::Size(95, 20);
    					this->blabla->TabIndex = 1;
    					// 
    					// Form1
    					// 
    					this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    					this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    					this->ClientSize = System::Drawing::Size(156, 62);
    					this->Controls->Add(this->blabla);
    					this->Name = L"Form1";
    					this->Text = L"Form1";
    					this->ResumeLayout(false);
    					this->PerformLayout();
     
    				}
    		#pragma endregion
     
    };
    }
    ClasseC/ClasseC.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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #ifndef CLASSEC_H_
    #define CLASSEC_H_
     
    // includes
    #include "windows.h"
     
    class ClasseC
    {
    	public:
    		~ClasseC() {}
    		ClasseC()
    		{
    			a=0;
    			CreateThread(0, 0x1000, ClasseC::RxThread, (LPVOID) 0, 0, NULL);
    		}
    		int DonnerA() { return a; }
     
    	protected:		
    		static int a;
    		static HANDLE test;
     
    		static DWORD WINAPI RxThread( void* par )
    		{
    			while( a < 100 )
    			{
    				WaitForSingleObject(test,1000);
    				a += 10;
     
    //Appeller IHM_Test::toto() et ainsi afficher a dans l'IHM
    			}
     
    			return 0;
    		}	
    };
     
    int ClasseC::a;
    HANDLE ClasseC::test;
    #endif /* CANCASE_H_ */
    Je me suis pench� sur la notion d'�v�nement (avec _event, _hook _unhook..) puis j'ai essay� les 'delegate' et j'ai m�me tent� un 'gcroot' pour que ClasseC soit 'managed' sans parler des #pragma managed et #pragma unmanaged qui n'ont pas fait grand chose.

    Alors soit je suis pas tomb� sur les bon exemples, soit je ne suis pas "dou�" mais toujours est il que je ne suis arriv� � rien.

    Si quelqu'un avait ne serait-ce qu'une piste pour m'�clairer ...
    Je lui en serait tr�s tr�s reconnaissant.


    Ah et si je poste au mauvais endroit, je m'excuse par avance.

  2. #2
    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
    Tu devrais peut-�tre plut�t poster dans le sous-forum C++/CLI, ils en savent un peu plus l�-dessus...

    PS: Ta classe native, est-elle quand m�me en code manag�e, ou bien est-elle carr�ment en code natif?
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 11
    Par d�faut
    Pour ton PS, c'est du natif pur (uniquement le ClasseC.h), du C++ normalis� en d'autres termes.

    On va me dire : "Oui mais pourquoi alors y a t'il un #incude windows.h dans le code natif ?"

    Il faut bien comprendre que ce code est une miniature (puissance 10) de mon projet o� je dois afficher � l'�cran des trames d'un bus CAN. Pour relier le PC au bus CAN, j'utilise un bo�tier fourni avec une DLL et un .h

    Et dans la DLL, j'ai une fonction bloquante que j'ai remplac�e dans mon code par WaitForSingleObject (histoire d'attendre un peu)

    J'esp�re avoir r�pondu � tes questions...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Par d�faut
    Tu utilises quoi comme interface, IXXAT ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 11
    Par d�faut
    Non, j'utilise un boitier CANCase mais je ne crois pas que cet indice vas t'aider pour autant.

    Si tu as un exemple avec un "delegate" qui marche je suis preneur.
    Toute la difficult� est d'associer une fonction manag�e � un �v�nement qui se produit dans un thread c�t� natif.

    Encore merci

  6. #6
    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
    En natif, le plus simple, c'est SendMessage() vers une fen�tre ou un contr�le natif.
    Mais avec les WinForms, �a se complique...
    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.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Par d�faut
    Citation Envoy� par Kuro_Tsuki Voir le message
    Non, j'utilise un boitier CANCase mais je ne crois pas que cet indice vas t'aider pour autant.

    Si tu as un exemple avec un "delegate" qui marche je suis preneur.
    Toute la difficult� est d'associer une fonction manag�e � un �v�nement qui se produit dans un thread c�t� natif.

    Encore merci
    Non, je disais �a parce que j'en ai d�j� fait ce genre de choses pour l'USB-to-CAN d'IXXAT. Mais je crois qu'eux fournissaient une dll .net. Je vais essayer de retrouver �a.

    Edit : Je viens de regarder Vector aussi fournissent un driver .net. Ca ne te convient pas ?

Discussions similaires

  1. R�ponses: 4
    Dernier message: 11/10/2011, 14h34
  2. unable to create new native thread
    Par jeha dans le forum Tomcat et TomEE
    R�ponses: 6
    Dernier message: 31/05/2010, 09h28
  3. R�ponses: 2
    Dernier message: 25/02/2010, 15h52
  4. R�ponses: 1
    Dernier message: 26/02/2008, 12h54
  5. Utilisation d'une dll native par une toolbar manag�e
    Par didierll dans le forum C++/CLI
    R�ponses: 1
    Dernier message: 10/07/2007, 07h56

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