Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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.

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.