!programmer Geschrieben 17. Februar 2005 Geschrieben 17. Februar 2005 Hallo, ich habe folgendes Problem: ich steuere über die serielle Schnittstelle einen Mikroprozessor an. Durch ein Ereignis an der seriellen Schnittstelle möchte ich die while-Schleife beenden. Ich habe dazu folgenden Code geschrieben: while(m_commMSComm1Strg.GetCommEvent()!=comEvReceive) { i++; sprintf(Ablage6, "%u", i); MessageBox(Ablage6); } Die MessageBox gibt immer den aktuellen Zaehlerwert aus. Mein Problem ist jetzt, dass ich die MessageBox nur zur Überprüfung eingebaut habe und ich sie wieder auskommentieren wollte, aber genau dann wird die Schleife trotz Ereignis am Comport nicht mehr beendet. Wieso und wie kann ich auch ohne MessageBox die schleife beenden??? mfg !programmer
Guybrush Threepwood Geschrieben 17. Februar 2005 Geschrieben 17. Februar 2005 Hmm könnte es evtl sein das das mit der MessageBox klappt weil dadurch eine Pause in der Schleife entsteht? Versuch mal die MessageBox durch Sleep(1000) zu ersetzen.
!programmer Geschrieben 17. Februar 2005 Autor Geschrieben 17. Februar 2005 hab ich schon probiert, funzt leider nicht. hm, das muss irgendetwas mit der messagebox zu tun haben. ohne die messagebox erkennt der den "interrupt" nicht und zählt bis unendlich...
Bubble Geschrieben 17. Februar 2005 Geschrieben 17. Februar 2005 Hallo, Durch ein Ereignis an der seriellen Schnittstelle möchte ich die while-Schleife beenden. Ich habe dazu folgenden Code geschrieben: while(m_commMSComm1Strg.GetCommEvent()!=comEvReceive) { i++; sprintf(Ablage6, "%u", i); MessageBox(Ablage6); } MessageBox hat mehr als einen Parameter (HWND, LPCTSTR, LPCTSTR, UINT). Deine Variante funktioniert nur für Member-Functions einiger Klassen der MFC. Mit dem Code-Fragment alleine kann ich nur raten woran es liegt, da ich die Member-Function GetCommEvent nicht kenne. Du musst deutlich mehr beschreiben oder an Code zeigen. Evtl. hilft es Dir aber statt des MessageBox Aufrufes ein Sleep(200) oder ähnlich einzubauen (siehe auch vorige Anwort), wobei ich das ohne weitere Nachforschungen nur als Work-Around betrachten würde.
Bubble Geschrieben 17. Februar 2005 Geschrieben 17. Februar 2005 ohne die messagebox erkennt der den "interrupt" nicht und zählt bis unendlich... Bestimmt nicht. Evtl. liegt Dein Fehler auch ganz woanders. Da ich nichts Genaues weiß kann ich nur weiter raten: Evtl. hilft es ja, die Message/Event-Verarbeitung manuell in der Schleife anzustoßen.
!programmer Geschrieben 22. Februar 2005 Autor Geschrieben 22. Februar 2005 ich habe das ganze folgendermaßen gelöst: while(m_commMSComm1Strg.GetCommEvent()!=comEvReceive) { PumpMessages(); } void CDeinDlg::PumpMessages() { ASSERT(GetSafeHwnd() != NULL); MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (!IsDialogMessage(&msg)) { ::TranslateMessage(&msg); :: DispatchMessage(&msg); } } }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden