Probleme mit der seriellen Schnittstelle oder Events
-
Hi,
Ich hab da mal echt nen Problem mit dem Auslesen einer seriellen Schnittstelle. Hier mal der Code:
OVERLAPPED overlapped; overlapped.Internal = 0; overlapped.InternalHigh = 0; overlapped.Offset = 0; overlapped.OffsetHigh = 0; overlapped.Pointer = 0; memset(&overlapped,0,sizeof(overlapped)); overlapped.hEvent = CreateEvent( NULL, // no security attributes TRUE, // auto reset event FALSE, // not signaled NULL // no name ); for(;;) { DWORD con = WaitCommEvent( m_CommData->hBarcodeScannerPort[ port], //Handle to the CommunicationDevice &dwEvtMask,&overlapped); // wait for data - but this // will return immediately because // it is overlapped con = GetLastError(); //IO-Pending ClearCommError(m_CommData->hBarcodeScannerPort[ port], &dwError, &comState); con = WaitForSingleObject(overlapped.hEvent, INFINITE); switch( con) { case WAIT_OBJECT_0: //... ResetEvent( overlapped.hEvent); break; } }
So, das ganze funzt beim ersten mal einwandfrei. Die WaitForSingleObject-Methode wartet solange, bis Daten auf der Schnittstelle ankommen.
Wird die for-Schleife allerdings beim 2.Mal durchlaufen, wartet die WaitForSingleObject-Methode nicht mehr auf Daten, sondern läuft einfach weiter.Woran kann das liegen? Das Event hab ich doch wieder zurückgesetzt?
Hab ich da nen ganz dummen Fehler drin?Gruss
Frosch
-
Liest du den buffer auch irgnedwo aus?
-
Frosch schrieb:
TRUE, // auto reset event
Das Flag heißt bManualReset.
-
CMatt schrieb:
Liest du den buffer auch irgnedwo aus?
Ja, das ist da wo die Punkte stehen
if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR) { do { // immer nur ein Byte lesen DWORD dwLength = 1; ReadFile( m_CommData->hBarcodeScannerPort[port], empfbl, dwLength, &dwLength, &overlapped) ; int iLen = dwLength; for(int i=0; i<iLen; i++) { barcode[j] = empfbl[i]; j++; } } while ( j < 10) ;
-
MFK schrieb:
Frosch schrieb:
TRUE, // auto reset event
Das Flag heißt bManualReset.
Ja, muss aber trotzdem TRUE sein
-
Moin,
so, habs mehr oder weniger rausgefunden. Poste es mal für den den es interessiert. Und vielleicht kann mir ja auch jmd dieses Phänomen erklären?
Also, die WaitForSingleObject-Methode wartet irgendwie nur jedes 2. Mal. Warum auch immer?
Naja, von daher muss man halt noch ein bool dazwischen setzen, dann läufts.Nice Day noch,
Frosch