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

VC++ .NET Discussion :

Gestion d'interruptions Visual C++ 2010


Sujet :

VC++ .NET

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ing�nieur m�canique
    Inscrit en
    F�vrier 2012
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : ing�nieur m�canique
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 27
    Par d�faut Gestion d'interruptions Visual C++ 2010
    Bonjour,

    Y a-t-il un moyen de g�n�rer une interruption lors de l'arriv�e d'un message sur le port USB.
    A l'heure actuelle, je viens lire par un timer le port USB et je le traite si longueur du message > 0.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void CBiaxialeDlg::OnTimer(UINT_PTR nIDEvent)
    {
    	// TODO: ajoutez ici le code de votre gestionnaire de messages et/ou les paramètres par défaut des appels
    	String^ buffer=Communic::Read();					// lecture port USB
    	pin_ptr<const wchar_t> wch = PtrToStringChars(buffer);	// Pointeur en chaine de caractères
     
    	if(wch[0] != L'')
    	{
    	// traitement
    	}
    }
    �a fonctionne mais cela ne me parait pas optimum.
    Je pense qu'on doit pouvoir faire mieux.


    Merci,

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Les interruptions mat�rielles/logicielles, c'est plut�t r�serv� aux couches tr�s bas niveau de l'OS.
    Au niveau .NET, on parle plus d'�v�nements, je pense.
    Et c'est tellement r�pandu, que je pense qu'ils doivent �tre g�r�s/utilisables par la classe de communication que tu utilises d�j� (et qu'on connait m�me pas, vu que tu ne l'indiques pas).

  3. #3
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Les interruptions mat�rielles/logicielles, c'est plut�t r�serv� aux couches tr�s bas niveau de l'OS.
    Au niveau .NET, on parle plus d'�v�nements, je pense.
    Et c'est tellement r�pandu, que je pense qu'ils doivent �tre g�r�s/utilisables par la classe de communication que tu utilises d�j� (et qu'on connait m�me pas, vu que tu ne l'indiques pas).

  4. #4
    Membre averti
    Homme Profil pro
    ing�nieur m�canique
    Inscrit en
    F�vrier 2012
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : ing�nieur m�canique
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 27
    Par d�faut
    La classe Communic est une classe perso: (qui n'a rien d'exceptionnelle)
    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
     
    public ref class Communic
    {
    	private:
     
    		static SerialPort^ serialPort;
     
    	public:
    		static void Ouvrir(wchar_t* NomPort)
    			{
    				int i=0;
    			serialPort = gcnew System::IO::Ports::SerialPort(); 
    			String ^ StringNomPort = gcnew String(NomPort);
    			serialPort->PortName=StringNomPort;
    			if (serialPort->IsOpen == false)
    				serialPort->Open();
     
    			}
     
    		static void Write(String ^octo)
    			{
    			serialPort->Write(octo);
    			Sleep(200);
    			}
     
    		static String^ Read()
    			{
    			String^ buffer=serialPort->ReadExisting();
    			Sleep(200);
    			return(buffer);
    			}
     
    		static void Fermer()
    			{
    			serialPort->Close();
    			}
    }
    ;
    Le Sleep est l� pour patienter le temps de la lecture.
    Si je ne le met pas, j'ai des probl�me de dialogue avec mon p�riph�rique USB
    Le serialPort->IsOpen == false est une mauvaise utilisation.
    Il est l� pour v�rifier que le port n'est pas d�j� ouvert.
    Mais en r�alit�, il contr�le que sa propre application n'a pas d�j� ouvert ce port.
    Si le port est ouvert par une autre application, �a plante.
    �a non plus je ne sais pas le r�soudre


    Pour autant, je ne sais pas r�soudre mon dilemme
    Je veux bien passer par un �v�nement mais comment le cr�er???? myst�re!

  5. #5
    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
    Citation Envoy� par fsr86
    Le serialPort->IsOpen == false est une mauvaise utilisation.
    Il est l� pour v�rifier que le port n'est pas d�j� ouvert.
    Mais en r�alit�, il contr�le que sa propre application n'a pas d�j� ouvert ce port.
    Sauf qu'il ne fait m�me pas �a, vu que tu r�-instancies � chaque fois serialPort dans la m�thode Ouvrir()!
    Tu devrais l'instancier dans le constructeur.

    Citation Envoy� par fsr86
    Si le port est ouvert par une autre application, �a plante.
    �a non plus je ne sais pas le r�soudre
    Il suffit d'une gestion correcte des exceptions. Dans le cas pr�sent, il vaut mieux laisser l'exception remonter � l'appelant (ou si tu l'attrapes, en relancer une avec un message plus pertinent, incluant l'ancienne dans innerException)

    PS: Pour ce qui est des attentes, vu que tu es dans une application fen�tr�e, tu peux utiliser les �v�nements que la classe SerialPort expose: SerialPort Events
    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.

  6. #6
    Membre averti
    Homme Profil pro
    ing�nieur m�canique
    Inscrit en
    F�vrier 2012
    Messages
    27
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activit� : ing�nieur m�canique
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 27
    Par d�faut
    �a se voit tant que �a que je d�bute....
    Oh zut!
    Bah ce qu tu me dis doit �tre vrai... mais je ne sais pas m'en sortir!
    je fais �a
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    try{serialPort->Open();}
    catch( System::Exception ^e)
    {
    	serialPort->PortName=L"COM1";
    }
    Mais �a ne fonctionne pas compl�tement.
    En explorant la variable e, je trouve bien dans la variable Message le texte {"L'acc�s au port 'COM7' est refus�."}
    Et l�, je ne sais plus m'en sortir.

    Tant pis, ce sera pour le retour de vacances
    Merci quand m�me de ton aide.

  7. #7
    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
    Pourquoi tentes-tu de catcher l'exception dans le code de Ouvrir? Je t'ai dit qu'il convenait de la laisser remonter � l'appelant!
    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.

Discussions similaires

  1. [D�butant] Visual studio 2010 - Gestion d'executables externes
    Par nomadev dans le forum Visual Studio
    R�ponses: 2
    Dernier message: 19/09/2013, 11h59
  2. [D�butant] gestion stock visual basic 2010
    Par ach2003 dans le forum VB.NET
    R�ponses: 4
    Dernier message: 19/08/2012, 22h56
  3. R�ponses: 0
    Dernier message: 23/08/2011, 15h12
  4. Gestion des interruptions du microprocesseur sous XP
    Par herve13 dans le forum API, COM et SDKs
    R�ponses: 4
    Dernier message: 20/08/2005, 18h29
  5. R�ponses: 7
    Dernier message: 02/03/2005, 14h45

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