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

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

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

}

}

}

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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