Kleine MFC Anwendung und Threads!??!



  • Hi leute,
    ich haette folgendes problem. ich habe ne kleine anwendung in C++ (und eine GUI drumherum mit MFC gemacht). Diese Anwendung liest einige Dateien ein und macht dann allerlei Sachen. Mein Problem:
    1)
    Ich weiss nicht wie lange das Prog. braucht bei sehr vielen Dateien. Es waere
    dann schoen eine Moeglichkeit zu haben mit der man den ganzen Prozess abbrechen kann wenns einem zu lange dauert. Führt das eigentlich zwangslaeufig zu threads!?!? irgenwie muss es ja moeglich sein zu checken ob waerend der ganzen rechnerei der nutzer keinen bock mehr hat und auf "Abbrechen" geklickt hat.

    Wie schaffe ich es in MFC den Mauszeiger entsprechend auf ne Eieruhr umzustellen!?!?

    Fuer Beispiele oder links waere ich sehr dankbar.

    Gruss



    1. Da ich keine andere Möglichkeit kenne während eines Prozesses etwas abzubrechen außer mit Threads, würde ich sagen ja.
    2. Der Cursor mit der kleinen Sanduhr ist IDC_APPSTARTING:
    AfxGetApp->LoadStandardCursor(IDC_APPTARTING)
    

    Code-Hacker



  • Zu 1.) Die 2. Möglichkeit
    Du musst die angekommenen Messages während deiner langen Berechnung ab und zu verarbeiten über eine Messageloop -> MSDN



  • Hi nochmal,
    habe in der MSDN nix gescheites gefunden und waere sehr erfreut, wenn mir jemand vielleicht n [pseudo]-code schnippsel oder n link schicken koennte fuer ne idee.

    vielen dank vorab.

    gruss



  • zu 2) CWaitCursor. Ändert bei der Erstellung der Variable automatisch den Cursor auf die Sanduhr und bei der Zerstörung wieder zurück.
    Also zb so:

    void LangeFunktion()
    {
        CWaitCursor WCursor; // Hier wird die Sanduhr angezeigt.
        // Monsterlange Berechnung
    } // Hier wieder der normale Cursor, da WCursor hier zerstört wird.
    


  • danke fuer den maus-tipp, eigentlich waere ich fuer tipps fuer den ersten teil noch dankbarer 😃

    gruss



  • BOOL Abbrechen = FALSE;
    void MessageLoop()
    {
        BOOL bRet;
        MSG msg; 
        while( (bRet = PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE)) != 0)
        { 
            if (bRet == -1)
            {
                // handle the error and possibly exit
            }
            else
            {
                PeekMessage( &msg, NULL, 0, 0, PM_REMOVE);
                TranslateMessage(&msg); 
                DispatchMessage(&msg);
            }
        }
    }
    
    void LangeDauerndeFunktion()
    {
      while( langeSchleife && !Abbrechen)
      {
        // Start the message loop.
        MessageLoop();
      }
    }
    


  • Das mit dem CWaitCursor funktioniert bei mir nur so halb-halb. Rufe ich diesen Ausdruck in einer Klasse auf, die von CPropertyPage abgeleitet ist, dann funktioniert es. Mein Berechnungsteil liegt aber in einer von mir selbst geschriebenen Klasse, die mit der Anzeige an sich nichts zu tun hat. Dort funktioniert es nicht.

    Wie könnte man das Problem lösen?



  • Macht man das eigentlich immer so!?!? MFC ist zwar auf winAPI aufgesetzt aber das ganze sieht mir dann zu sehr nach winAPI aus. Gibt es keine Bibliotheksfunktionen die das gleiche machen!?!?!

    zu der mausfrage (von anderem user) aus letztem beitrag waere ne antwort auch schoen 🙂

    danke
    gruss



  • class CWinThread
    Bitte schaue das nächste mal zuerst in die FAQ


Anmelden zum Antworten