Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.

Geschrieben

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.

Geschrieben

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);

}

}

}

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...