-
Gestion de QSerialPort
Bonjour à tous,
je suis en train de m'amuser avec le QSerialPort, et je remarque certaines choses que je ne comprends pas.
Le contexte, je reçois des données sur ma ligne série, que j'enregistre dans un fichier.
J'utilise la fonction "read", et la première question qui vient est, pourquoi devoir rentrer le nombre d'octets lus:
serial.read(dataSerial, 10);
Que se passe-t-il si le nombre d'octet envoyé est inférieur ou supérieur à 10 pour notre exemple ?
Il y a-t-il un timeout, en gros comment ça marche ?
Autre point, je suis dans un boucle infinie ou les données lues sont directement enregistrées dans un fichier, et je me suis aperçu de la chose suivante:
Si je mets serial.read(dataSerial, 1000); j'ai presque toutes les données d'enregistrées (mais pas tout, manque les dernières données envoyées)
Si je mets serial.read(dataSerial, 50); je n'ai environ que la moitié des données envoyées (il manque la moitié des données finales).
Pourquoi ? parce que même si les données ne sont plus envoyées sur la ligne série, le programme tourne toujours et devrait enregistrer les dernières.
Ou ma méthode n'est pas bonne et il faut que je fasse différemment.
Merci de m'avoir lu
-
Bonjour,
Le read() accepte une taille afin de ne pas faire de dépassement de tampon avec le tampon qui reçoit des données (si vous lisez 1000 octets alors que votre tampon ne fait que 500 octets, cela risque de très mal se passer (et ce serait une faille de sécurité)).
La taille spécifiée est une taille de données lues maximale (lira au maximum N données). La fonction ne bloque pas, même s'il n'y a rien à lire. Pour bloquer, vous avez waitForReadyRead() (avec un paramètre de timeout).
Dans la documentation, on retrouve un exemple d'une boucle permettant de lire les données disponibles.
-
Merci LittleWhite pour la réponse, mais j'ai compris que cétait le nombre de données lues et souhaitées au maximum, mais ma question est, comment et/ou à partir de quand la fonction "read" estime qu'il n'y a plus de données à recevoir ?
Autre question, pourquoi si je mets une lecture de 50 octets, je n'aurai que la moitié des données lues que si j'avais mis 1000 ? (pour mieux comprendre voir ma question initiale)