J'écris une application de bureau QT qui va afficher des informations reçues à partir d'un port série. Par conséquent, une classe a été créée et compressée dans une DLL à l'aide des fonctionnalités standard de l'API Windows pour communiquer avec le périphérique connecté (CreateFile, ReadFile, WriteFile, ...). Au moment où un temporisateur appelle la DLL à un débit prédéfini [< 200ms], l'interface se bloque pendant de courtes périodes. Pour cette raison, je pense à utiliser un thread pour faire le port série, cela va aussi tout afficher.communication de port série à threads en C++ avec Qt
Est-il préférable d'utiliser des threads pour ce problème ou devrais-je réécrire la classe pour faire l'événement de travail basé? La cible est, que le gui ne gèle pas. J'ai résolu le problème en utilisant une classe de travail dérivée QThread avec une fonction run() ombragée, qui gère la communication du port série en arrière-plan et met à jour le GUI lorsque de nouvelles informations sont disponibles.
Y a-t-il une raison pour ne pas utiliser ['QSerialPort'] (https://doc.qt.io/qt-5/qserialport.html#details)? – Mike
'QSerialPort' fait déjà le travail de communication asynchrone avec un port série. L'utilisation de threads pour une telle tâche fonctionnera si votre but est de ne pas geler l'interface graphique, mais c'est une exagération. L'approche asynchrone fonctionne mieux avec Qt, et elle est beaucoup plus facile à maintenir. – Mike
Lorsque le projet a été démarré, nous n'allions pas utiliser qt. Donc, nous avons commencé en utilisant seulement les fenêtres api – Aeonos