Bonjour à tous,
Encore une question sur la lecture du port série. Je n’arrive pas à comprendre ce qui bloque.
Mon programme n’a aucun intérêt sinon de comprendre qq notions apprises. Je cherche à lire le port série en mode asynchrone et afficher les données reçues. Pour cela, la fonction main crée deux threads : un pour la lecture des données et un autre pour l’affichage.
Bref mon problème se trouve sur le thread de lecture du port série :
Je commence par créer un événement :
si tout est ok je lis les données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part osReader.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
Le port com est bien ouvert en mode FILE_FLAG_OVERLAPPED. Donc si j’ai bien compris la fonction ReadFile ne se bloque pas et si l’opération n’est pas terminée elle renvoie false. C’est ensuite à nous de tester l’objet du retour avec GetLastError(). Dans mon cas et c’est bien là mon problème ReadFile retourne toujours True alors que le nombre de caractères lus (dwRead) est égal à 0.
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 var = ReadFile(mySerialInterface.m_hCOM, rcvFrame, bytesToRead, &dwRead, &osReader); if(!var) { if(GetLastError() != ERROR_IO_PENDING) // read not delayed? { // Error in communications; report it. return 0; } else { fWaitingOnRead = 1; } } if(fWaitingOnRead) { dwRes = WaitForSingleObject(osReader.hEvent, READ_TIMEOUT); switch(dwRes) { …. } …. }
Ça fait un bon moment que je tourne en rond, si qq pouvait me donner qq pistes à suivre je vous remercie.
Bonne fin de journée à tous
Partager