!programmer Geschrieben 17. Februar 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 17. Februar 2005 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
!programmer Geschrieben 17. Februar 2005 Autor Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 17. Februar 2005 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 17. Februar 2005 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
!programmer Geschrieben 22. Februar 2005 Autor Teilen 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); } } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.