Veröffentlicht 17. Februar 200520 j 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
17. Februar 200520 j 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.
17. Februar 200520 j 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...
17. Februar 200520 j 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.
17. Februar 200520 j 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.
22. Februar 200520 j 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); } } }
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.