2016-02-07 1 views
-2

Je suis nouveau à C++ et à la communication série de Windows. Maintenant, je suis Microsoft link., Mais là, je ne connais pas la signification des variables suivantes ce que font ces variables. S'il vous plaît aidez-moi à comprendre ce que les variables suivantes. variables je n'ai pas idéeWindows série de communication C++

  1. IPBUF
  2. dwRead

Code

DWORD dwRead; 
BOOL fWaitingOnRead = FALSE; 
OVERLAPPED osReader = {0}; 

// Create the overlapped event. Must be closed before exiting 
// to avoid a handle leak. 
osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 

if (osReader.hEvent == NULL) 
    // Error creating overlapped event; abort. 

if (!fWaitingOnRead) { 
    // Issue read operation. 
    if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) { 
     if (GetLastError() != ERROR_IO_PENDING)  // read not delayed? 
     // Error in communications; report it. 
     else 
     fWaitingOnRead = TRUE; 
    } 
    else {  
     // read completed immediately 
     HandleASuccessfulRead(lpBuf, dwRead); 
    } 
} 
+0

ipBuf est le tampon d'entrée de taille READ_BUF_SIZE octets qui doivent être alloués avant d'appeler ReadFile. dwRead renvoie le nombre d'octets effectivement lus dans cet appel. dw signifie un type de données DWORD. – prabindh

Répondre

0

En un mot, API Windows rend la lecture et l'écriture aux ports série similaires à lire/écrire sur un fichier basé sur un disque (CreateFile/ReadFile/Wri teFile).

CreateFile est utilisé actuellement pour "ouvrir le port série" (ce qui signifie obtenir un accès exclusif) car il n'y a rien à créer réellement. ReadFile et WriteFile sont plutôt explicites.

Le seul aspect qui crée une confusion est le mode de fonctionnement - E/S superposées et non superposées. Ils ont la même signification que les E/S asynchrones et synchrones. Généralement, la lecture et l'écriture sur les ports série peuvent prendre une durée variable en fonction de facteurs tels que la quantité de données réellement disponibles sur l'appareil ou si l'appareil est encore occupé à envoyer les données précédentes à envoyer. Les E/S superposées permettent une attente efficace sur les tâches, en utilisant des "événements" pour renvoyer un signal au thread appelant lorsque les tâches sont terminées.

En supposant que vous écrivez une application Win32 (GUI/Console), vous voudriez que votre application reste sensible à l'entrée de l'utilisateur à tout moment. Cela signifie que vous voulez aller multi-thread, un thread pour gérer l'interface utilisateur et l'autre pour gérer la communication. Ce fil de communication peut soit utiliser des E/S superposées (complexe, mais plus efficace en termes d'utilisation du processeur) ou des E/S non superposées (plus facile). Vous pourriez vouloir regarder cette bibliothèque qui prétend avoir une interface plus simple http://www.naughter.com/serialport.html. Je n'ai pas utilisé moi-même et par conséquent ne peut pas se porter garant pour cela.