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