Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » DoEvents in C++?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2006, 11:58 Uhr
Stephan Abonyi



Hallo!

wie kann ich in einem Function so warten, dass andere Teile des Programms weiterlaufen
ohne diese Funktion in eine extra Task zu plazieren? Geht es überhaupt?
(In VB gab es ein Befehl "DoEvents".)

Gruß an Alle!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.12.2006, 12:36 Uhr
~Flapsi01
Gast


Hallo !

Solch ein Problem würde ich mit verschiedenen Workerthreads lösen, die blockieren können, ohne das Hauptprogramm zu beeinflussen. Wenn es sich bei der Funktion um einen zeitabhängigen Aufruf handelt, könnte man auch mit einem Timer und einer Call-Back-Funktion arbeiten.

Ich kenne DoEvents() eher als Funktion, mit der in VB die Kontrolle kurz an das Betriebssystem zurückgegeben wird, damit Dinge wie Systemnachrichten verarbeitet werden können und z.B. eine Bedienung wie ein Buttonklick bei einer laufenden Funktionsschleife verarbeitet werden kann. In VC++ würde das dann wohl eher einer MessagePump als einer Threadfunktion entsprechen.

Hoffentlich hat's geholfen.

Gruß

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.12.2006, 13:20 Uhr
Stephan Abonyi



Danke für den schnellen Antwort.

Mein eigentlichen Problem, dass ich eine Mänge an ser. Schnittstelle herausgebe und
dazwischen wollte ich Zustandmeldungen herausgeben und eine Progressanzeige
aktualisieren. Dieses geschiet aber trotz Anruf UpdateData und dierckte Beschreibung
mit SetDlgItemText und Int nur am Ende, wenn der Datenverkehr zu Ende ist.

Unterbricht die Timer-Ereigniss diese laufende Datenverkehr?

Gruß Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.12.2006, 15:31 Uhr
~Flapsi01
Gast


Hallo Stephan,

vielleicht erlaubst Du Deiner Anwendung während Du sendest garnicht die Nachrichtenschleife von Windows abzuarbeiten. Insofern erfolgt dann auch keine Aktualisierung Deiner Anzeige. Versuch doch mal folgendes:


C++:
BOOL PeekAndPump()
{
    MSG msg;
    while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){
        if(!AfxGetApp()->PumpMessage()){
            ::PostQuitMessage(0);
            return FALSE;
        }
    }
    LONG Ildle=0;
    while (AfxGetApp()->OnIdle(Ildle++));
    return TRUE;
}



In Deiner Sendeschleife für die serielle Schnittstelle rufst Du dann die Funktion bei jedem x-ten Durchlauf auf, z.B. mit


C++:
.
BOOL s;
while(noch_was_da){
     WriteFile(h_com, Send, len, n_BytesWritten,NULL);
     Anzeige_aktualisieren();
     s=PeekAndPump();
}




Gruß

Flapsi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.12.2006, 16:16 Uhr
Stephan Abonyi



Hallo Flapsi,

Vielen Dank! So wird es schon funktionieren!
Gruß Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: