//funktion zum starten (freigeben) des empfangs! unsigned int __fastcall comlesen(void) { commlesen *testthread=new commlesen(true); // angehalten init(); // alles reset!!! puffer clear und schreibezeiger, lesezeiger auf 1. speicherplatz testthread->Priority=tpNormal; testthread->Resume(); // Starten des Thread! if (testthread->Suspended) Application->MessageBoxA("Thread läuft nicht! 1","Fehler!",MB_OK); while(status==255); // warten auf thread! testthread->Suspend(); testthread->Terminate(); testthread->~commlesen(); if (!PurgeComm(hseriel,PURGE_RXCLEAR)) // puffer der com leeren! Application->MessageBoxA("kein Puffer clear!","Fehler!",MB_OK); return(schreibeindex-leseindex); } // Thread für den Daten empfang void __fastcall commlesen::Execute() { while(!Terminated) { if (timeout==0) timeout=15; a=timeout; // altes timeout while(status==255) // lesen erlauben! { if (!ReadFile (hseriel, &rx,1,&iBytesReceived,&o)) { DWORD error = GetLastError(); if (ERROR_IO_PENDING != error) Application->MessageBoxA("read Fehler!","Fehler!",MB_OK); } tab=WaitForSingleObject( o.hEvent, timeout ) ; if (tab== WAIT_FAILED) Application->MessageBoxA("wait Fehler!","Fehler!",MB_OK); if( WAIT_OBJECT_0 == tab) { // Daten sind da if (timeout==a) timeout=30; // erstes zeichen da? dann neues timeout *schreibeindex=rx; // daten in den puffer schreibeindex++; // zeiger +1 *schreibeindex='\0'; if (wert>1 && timeout== zeittimer2) Application->MessageBoxA("Timeout zu groß","Fehler!",MB_OK); } else { // Timeout ist gekommen!!! if (timeout==a) { // Application->MessageBoxA(" Timeout, keine Daten Empfangen!","Fehler!",MB_OK); // altes timeout status=30; } else { // daten liegen for status=20; // timeout 20ms } } } } } // funktion zum daten senden!!! unsigned int __fastcall datensenden(String data) { unsigned int test=status; AnsiString h1=""; status=0; // empfang verbieten!!! BOOL result=WriteFile(hseriel,data.c_str(),data.Length(), &iBytesWritten, &o); if (FALSE==result) { DWORD error = GetLastError(); if (ERROR_IO_PENDING != error) { h1=h1+"WriteFile misslungen!"+"\nFehlercode: "+IntToStr(error); Application->MessageBoxA(h1.c_str(),"Fehler!",MB_OK); return(1); } } //Sleep(1); status=test; return (0); }