Ciao MItaly,
ti ringrazio dei suggerimenti, ma avrei ancora bisogno del tuo aiuto e di quello di altri...

Trascurando il fatto che ieri sera il programma funzionava e questa mattina non aveva proprio voglia di andare...
Ho creato un thread solo per la scrittura e, fino a ieri sera, tutto funzionava.
Questa mattina ho fatto rigirare il programma e si bloccava, non mi dava ne scrittura ne lettura.
Ho messo questo pezzo di codice:

codice:
...
HANDLE threadHandles[1];
...
threadHandles[0] = CreateThread(NULL, 0, WriteThreadProc, &wp, 0, NULL);
WaitForMultipleObjects(1,threadHandles,TRUE,INFINITE);
...
e in questo modo riuscivo a inviare il comando e a leggerne la risposta.
Penso che sia tutto un problema di sincronizzazione con la seriale.
Ho provato a creare un thread per la funzione di lettura, e ho scritto:

codice:
BOOL read(HANDLE hComm, char read_c)
{
   DWORD nNumberOfBytesToRead = 1;
   DWORD NumberOfBytesRead;
   LPOVERLAPPED lpOverlapped = NULL;

   BOOL res1 = ReadFile(
	hComm,
	&read_c,
	nNumberOfBytesToRead,
	&NumberOfBytesRead,
	lpOverlapped
	);
   return res1;
}

struct readParams
{
    HANDLE hComm;
    char read_c;
};

DWORD WINAPI ReadThreadProc (LPVOID lpParameter)
{
    readParams * rp=(readParams *)lpParameter;
    return (DWORD) read(rp->hComm, rp->read_c);
}
e dove mi serve:

codice:
for(;;)
{
   rp.read_c=c;
   threadHandles[1] = CreateThread(NULL, 0, ReadThreadProc, &rp, 0, NULL);
			
   if (NumberOfBytesRead>0)
      cout << c;
			
   int keydown = _kbhit();
   if (keydown)
     break;
}
ma dopo la lettura del buffer non esce dal for.
Non esce dal for anche se non utilizzo il thread di lettura e scrivo:

codice:
for(;;)
   {
				
     nNumberOfBytesToRead = 1;
     bResult = ReadFile(
	hComm,
	&c,
	nNumberOfBytesToRead,
	&NumberOfBytesRead,
	lpOverlapped
	);

     if (NumberOfBytesRead>0)
	cout << c;
			
     int keydown = _kbhit();
	if (keydown)
   	   break;
    }
Sinceramente non so proprio che fare.
Avete dei suggerimenti?
Grazie
Ciccio