Bonjour,
Pour d�finir le contexte, j'utilise la classe CCom de Farscape pour r�cup�rer des donn�es en mode asynchrone sur la liaison s�rie. Je lance le thread de r�ception � partir d'une classe d�riv�e de CDialog. Lorsque le thread d�tecte l'�v�nement EV_RXCHAR, il envoie un message WM_CCOMRCV vers ma classe parent d�riv�e de CDialog. L'arriv�e de ce message d�clenche la fonction suivante:
Ainsi, je viens lire et stocker les donn�es dans le buffer de r�ception � chaque �mission du message WM_CCOMRCV.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 long CComTLS::ON_WM_CCOMRCV(WPARAM wparam,LPARAM lparam) { char sz[4096+1] = {0}; m_comDll.ReadBuffer(sz,sizeof(sz)-1); m_sRx += sz; m_nTotalOctetLus += m_comDll.GetCountRead(); return 0L; }
Je g�re un time out de r�ception grace au code suivant: (Ce code fait partie d'une fonction appell�e par un autre thread de travail qui attend de r�ceptionner toutes les donn�es �mises).
Mon probl�me:
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 if(ret) { bool bEndWhile = false; UINT OctetLus = 0; while(!bEndWhile) { OctetLus = m_nTotalOctetLus; Sleep(2000); if( OctetLus == m_nTotalOctetLus ) { bEndWhile = true; } } m_sMNV = m_sRx; }
Ce code fonctionne depuis un moment. Mais bizarrement, je perds des donn�es depuis peu...
J'utilise ce m�me code dans une version ant�rieure du logiciel que je d�veloppe et j'obtenais ceci:
Maintenant j'obtiens cela:01 54 00 00 01 00 01 01 01 D8 0810 00000028 00 EF 4C TOTO
01 42 00 00 01 00 01 03 01 00 0800 000000B6 61 EF 4C TATA
01 54 00 01 01 00 01 01 01 C9 0810 00000028 00 EF 4C TOTO
01 42 00 01 01 00 01 03 01 00 0800 000000B6 61 EF 4C TATA
Il me manque donc de temps en temps des caract�res (ici le saut de fin de ligne, mais aussi des donn�es)...01 54 00 00 01 00 01 01 01 D8 0810 00000028 00 EF 4C TOTO0 01 00 01 03 01 00 0800 000000B6 61 EF 4C TATA 01 54 00 01 01 00 01 01 01 C9 0810 00000028 00 EF 4C TOTO01 42 00 01 01 00 01 03 01 00 0800 000000B6 61 EF 4C TATA
Quelles pourraient �tre les causes de pertes de donn�es? et quelles pourraient �tre les raisons pour que d'un c�t� (version ant�rieur du logiciel) ca fonctionne et de l'autre (version actuelle) non?
Il y aurait il une histoire d'augmenter la priorit� d'un thread?
Si vous avez des id�es, merci d'avance.
Nicolas
Partager