serielle schnittstelle
-
hi!
wollte fragen ob ich auch ohne Overlapped structure gleichzeitig senden und empfangen....mit einem thread für senden und einen thread fürs empfangen, müsste gehn? für was braucht man eigentlich Overlapped...mehere daten hintereinander senden ohne die bestätigung vom empfänger?cu
-
ja, das funktioniert, sofern die lese/schreibe routinen in seperaten threads laufen. der overlapped mode ist vielmehr dazu gedacht, die ganze geschichte in einen asychronen modus zu fahren - will heissen, die funktionen zum lesen/schreiben blockieren nicht mehr sondern kehren nach aufruf sofort zurück und du kannst über die overlapped structures events abfragen ob das lesen/schreiben schon abgeschlossen ist.
vgl. auch WSAAsynchSelect für socket anwedungen.
R.///
-
ok!
ich öffne die COM1 mit CreateFile im Overlapped Mode!
dann maach ich setcommask! und setzte das event für die overlapped struktur...
dann warte ich im thread auf WaitCommEvent...und weiters WaitForSingleObject warte ich auf das Event fürs empfangen...
dann gebe ich die zeichen was empfangen wurden aus....
was ich nicht verstehe...warum brauch ich da noch WaitForSingleObject und GetOverlappedResult????cu
hComm = CreateFile (const_cast<char*>(szPort.str().c_str()), // COM-Port öffnen GENERIC_READ | GENERIC_WRITE, // wir wollen lesen und schreiben 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, // Overlapped I/O Mode NULL); // Set COM1 Event Mask SetCommMask(hComm, EV_RXCHAR); // Set Event if character receive // Assign event to overlapped structure o_send.hEvent = Event1.getHandle(); im Thread: --------- while(1) { WaitCommEvent(pReceive->getHandle(), &dwRead, &pReceive->getOVERLAPPED_receive()); WaitForSingleObject(pReceive->getEventHandle(), INFINITE); cout << pReceive->ReadData(1) << endl; // Wait for read operation to be finished GetOverlappedResult(pReceive->getHandle(), &pReceive->getOVERLAPPED_receive(), &dwRet, TRUE); }