Voici mon problème: Je dois être en mesure d'envoyer et de recevoir un périphérique en série. Cela doit être fait de manière multi-thread. Le flux est la suivante:Producteur/Consommateur Pour parler aux périphériques en série
Attendez appareil pour me envoyer quelque chose - ou en cas d'inactivité, puis requête de l'état pour voir si en ligne avec dispositif
Si l'appareil me envoie quelque chose, alors le message de processus, reconnaître , et indiquer au périphérique d'exécuter d'autres commandes si nécessaire.
À l'heure actuelle, j'ai un thread de réception et un thread de transmission. Le thread de réception a une boucle while qui vérifie le port série via ReadFile (...) pour un octet. Si j'ai un octet, alors je commence à construire mon tampon et ensuite analyser les données pour déterminer ce qui m'a été envoyé.
Le thread d'envoi prend la commande suivante définie par le thread de lecture et l'envoie via WriteFile au même port COM. La clé est qu'il existe une relation de réception/envoi entre moi et l'appareil.
Ma question est la suivante: est-ce que j'ai un modèle imbriqué producteur/consommateur ici? Si mon thread de réception est en train de consommer depuis le périphérique et que le thread d'envoi est en train de produire vers le périphérique, les threads doivent parler de manière inhérente pour être synchronisés, n'est-ce pas? Quelle est la meilleure façon de synchroniser mes efforts efficacement et rapidement parler à l'appareil? Note: J'utilise C++ Builder 5 qui a TThreads et peut utiliser des sections critiques et des mutex. Edit: J'utilise aussi l'interrogation, donc je suis ouvert à l'utilisation de WaitCommEvent si cela fonctionne mieux!
Oui, mais comment puis-je synchroniser l'accès à l'appareil de sorte que lorsque je lis, je n'écris pas? Drapeau mondial? –
Etes-vous sûr de devoir le faire? Si c'est le cas, vous pouvez utiliser un sémaphore pour synchroniser les opérations de lecture/écriture. Ce http://stackoverflow.com/questions/1488712/is-it-safe-to-read-and-write-to-a-serial-port-at-the-same-time-via-different-thre pourrait être utile. – Duck