Comment 'flusher' un port serie ?

pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 8 avril 2008 à 14:06
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 9 avril 2008 à 12:07
Bonjour,
Je fais un projet en C++ .net (managed)
Mon programme affiche ce qui arrive sur le port série dans une richTextBox. (en gros un hyperterminal)

Le probleme est que si je 'read' mon port serie dans une boucle while(1), je n'ai jamais rien qui s'affiche.
En effet c'est d'abord stocké en mémoire puis envoyé à la textBox une fois le while terminé. Or mon while ne se termine jamais.

Je me suis renseigné, j'ai vu qu'on pouvait faire un Flush du port serie, qui dans mon cas viderai le buffer pour l'afficher.
Mais ce membre 'flush' n'apparait pas dans la liste (IntelliSense de VC++), et si je le met 'à la main', le compilo me dit que ce n'est pas un membre. Or Flush est référéncé par la msdn !
Je ne comprends pas pourquoi je ne peux pas utilisé ça...

Merci de votre aide

4 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 1
8 avril 2008 à 14:23
Utilise donc des threads.

@+
Arnotic,
Admin CS
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
8 avril 2008 à 14:54
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
8 avril 2008 à 15:08
Arnotic > merci mais ca serait quand meme plus simple si j'avais access à la méthode flush..

Deathcrash > Merci, j'avais déjà vu cette classe. Mais j'ai fais tout mon code avec System::IO::Ports::SerialPort...

Ce n'est pas bizarre que la MSDN propose une méthode que le compilo VSC++ 2005 ne prend pas en charge ?!

j'ai essayé ça dans mon while(1) :

// tentative de flush...
serialPort1->BaseStream->Flush();
richTextBox1->Refresh();
serialPort1->DiscardOutBuffer();

Mais rien... le Refresh() afiche bien mes données au fur et à mesure mais la fenetre reste 'freezée', je ne peux pas appuyer sur le bouton stop par exemple.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
9 avril 2008 à 12:07
Comme Arnaud te l'a conseiller utilise des threads.
En C++/CLI tu dois avoir le namespace System.Threading qui permet de faire cela.
Tu n'aura ainsi plus besoin de flusher ton port série pour forcer la mise à jour des data.

Shell
0