el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
4 août 2005 à 11:18
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
29 déc. 2005 à 12:51
Slt,
voilà, je lance un thread qui lit ce qui arrive sur le port série.
L'instruction suivante boucle sur elle même tant que l'on ne recoit
rien :
Dès que l'on recoit qqch, le thread en question passe à l'instruction suivante.
Mon problème se situe lorsque je veux fermer le port COM qui est en train d'être scanné,
je fais un .Abort() sur le thread, mais mon appli ne veut pas fermer le
port car le thread doit être bloqué sur l'instruction ReadFile(...).
Quand j'essaye de fermer le port lorsque je n'ai pas lancé le thread de lecture du port, aucun problème.
Comment faire pour arréter toute instruction en cours ou en attente d'un thread, pour pouvoir ensuite arréter ce thread ?
(le port COM ne veut pas être fermé même après l'arrêt du thread de
lecture, car une instruction est toujours en train d'accéder au port )
Vu qu'en fait, c'est comme un accès à un fichier, y'aurait pas un
flush() ou un truc dans le genre pour arréter tout accès en cours au
fichier ? pour pouvoir fermer le fichier ?
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 4 août 2005 à 16:54
En fait, quand j'ai déboggé la fonction de lecture du port série, quand j'arrive sur l'instruction
retVal = ReadFile(_portHandle, buffer, 1, ref numBytesRead, IntPtr.Zero) ;
et que je fais F11 (instruction suivante), la
ligne jaune disparaît, le thread reste en attente de recevoir qqch sur
le port série, car jusque là le buffer de réception est vide.
Dès lors que je recois un octet, la ligne jaune réapparait instantanément l'instruction suivante qui est :
return _readData ? buffer[0] : (byte)0 ;
En gros, lorsque je kill le thread qui fait la lecture, et que je veux
ensuite ferme le port COM ouvert, l'instruction close(handle) reste
bloquée car le thread qui faisait la lecture était bloqué sur une
instruction qui accédait tout le temps à ce port en lecture, donc, le
close(handle) ne veut pas ferme le port puisque qqch essaye d'y accéder.
Comment je peux faire pour stopper tout accès au port avant de le fermer ?
cs_thebigboss
Messages postés216Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention12 avril 20172 7 déc. 2005 à 16:25
Salut,
je suis interressé par la liaison série et il semble que tu l'utilises sans probleme. Pourrais-tu m'envoyer les fonctions que tu utilises pour mettre en oeuvre la laison RS232?
roolian
Messages postés1Date d'inscriptionjeudi 2 octobre 2003StatutMembreDernière intervention29 décembre 2005 29 déc. 2005 à 09:32
Merci beaucoup pour ta source, ells est très intéressante.
J'ai bricolé un peu dessus et pour fermer correctement le port, j'ai peut-être trouvé la solution pour "stopper tout accès au port avant de le fermer "
- puis tu ajoutes l'instruction au début de ClosePort dans ConnexionSerie.cs
public void Close_Port()
{
CancelIo(_portHandle);
.......................
}
J'espère que c'est ça, sinon tiens moi au courant, merci encore.
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 29 déc. 2005 à 12:51
Salut, en fait, je crois que j'avais trouvé la solution, mais plus
moyen de remettre la main dessus. Il s'agit en fait d'une erreur dans
la doc de msdn. Eh oui, c'est une erreur dans la valeur d'une constante
de mémoire. Il faut mettre 0x8000000 à la place de 0x4000000 un truc
comme ça. Et après, on peut fermer le port série.