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:
e in questo modo riuscivo a inviare il comando e a leggerne la risposta.codice:... HANDLE threadHandles[1]; ... threadHandles[0] = CreateThread(NULL, 0, WriteThreadProc, &wp, 0, NULL); WaitForMultipleObjects(1,threadHandles,TRUE,INFINITE); ...
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:
e dove mi serve: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); }
ma dopo la lettura del buffer non esce dal for.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; }
Non esce dal for anche se non utilizzo il thread di lettura e scrivo:
Sinceramente non so proprio che fare.codice:for(;;) { nNumberOfBytesToRead = 1; bResult = ReadFile( hComm, &c, nNumberOfBytesToRead, &NumberOfBytesRead, lpOverlapped ); if (NumberOfBytesRead>0) cout << c; int keydown = _kbhit(); if (keydown) break; }
Avete dei suggerimenti?
Grazie
Ciccio

Rispondi quotando