Gast
#3706570
Hallo, ich bin dabei mir ein kleines Progamm schreiben, um mit dem PC über die serielle Schnittstelle mit einem AVR zu kommunizieren. Programmiersprache C++, Verwendeter Compiler Microsoft Visual C++ 4.2 (ich weiß, ziemlich alt). Betriebssystem Windows 7. Die Verbindung mit dem COM3-Port wird NON-OVERLAPPED in dem Unterprogramma "afx_msg void WinRS232::CmConnectRS232()" hergestellt. Das gesamte Programm befindet sich im Anhang. Mein Problem ist folgender Programmteil: //*************************************************************** afx_msg void WinRS232::CmRead() //*************************************************************** { ButtonRead->EnableWindow(FALSE); int Flag = 0; memset(BufferRead, 0, 100); for(;;) { if(WaitCommEvent(h_Com, &dwEventMask, NULL) == TRUE) { ReadFile(h_Com, BufferRead, 100, &NumBytesRead, NULL); Flag = 1; } if(Flag == 1) { EditRead->SetWindowText(BufferRead); Flag = 0; memset(BufferRead, 0, 100); AfxMessageBox("Read OK",MB_OK); break; } }//for ButtonRead->EnableWindow(TRUE); return; } //---------------------------------------------------------------------- -------- Dass Unterprogramm wartet nach dem Drücken eines"Read-Buttons" in der for-Schleife auf den String vom COM-Port und gibt diesen dann in einem Textfeld aus. Das Programm tut das, was es soll, auch wenn ich zu Testzwecken den "break"-Befehl entferne, um sozusagen dauerhaft in einer Endlosschleife Strings einlesen und ausgeben zu können. Abgesehen davon daß sich der PC in einer Endlosschleife befindet und über den Task-Manager abgeschossen werden muß. Wenn ich allerdings den break- UND den AfxMessageBox-Befehl entferne, funktioniert das Programm nicht mehr, d.h. es wird nichts mehr in dem Textfeld ausgegeben. Warum ist das so? Vielen Dank im Voraus.