Problem mit OnInitDialog



  • In meiner OnInitDialog-Funktion macht mein Prog einige zeitaufwendige Berechnungen. Während dieser Zeit (bis zu 40 sec.) tut sich auf dem Bildschirm nix. Ich habe gedacht, dass ich eine Meldung - in etwa: "System wird geladen - bitte um Gedult" erscheinen lasse, damit man weiss, dass sich da was tut...

    Mein erster Ansatz war einen eigenen Meldungsdialog, ohne Systemmenue mit o.g. Text zu erzeugen und davon eine Member-Variable als Pointer zu bilden:

    private:
        MeineMeldungDlg *m_pDlg;
    

    In der OnInitDialog-Funktion kreiere ich diesen Dialog und rufe dann einen Anzeige-Thread auf, bevor ich meine Berechnungen durchführe:

    m_pDlg = new MeineMeldungDlg;
    m_pDlg->Create(IDD_MEINE_DIALOG_ID, this);
    AfxBeginThread(MeldungAnzeigen, m_pDlg);
    //ab hier werden die Berechnungen durchgeführt
    

    Der Thead sieht wie folgt aus:

    UINT MeldungAnzeigen(LPVOID arg)
    {
        MeineMeldungDlg *pDlg = (MeineMeldungDlg *)arg;
    
        pDlg->ShowWindow(SW_SHOW);
        return 0;
    }
    

    Nach der Berechnung rufe ich einen weiteren Thread auf, der die Meldung verbergen soll:

    pDlg->ShowWindow(SW_HIDE);
    

    Mir scheint, dass der Thread zwar in OnInitDialog aufgerufen wird aber erst nach OnInitDialog abgearbeitet wird.

    Hat jemand einen Einfall?



  • Tut es auch die einfache Sanduhr? dann schreib als erste Zeile der Funktion:

    CWaitCursor csr;
    

    Fertig. Solange die Funktion läuft, existiert die Variable ja und so lange wird die Sanduhr angezeigt. 😃



  • Warum nimmst du keinen Thread für deine Berechnungen ?????? 😕



  • johnfoo hat mit der Frage:

    johnfoo schrieb:

    Warum nimmst du keinen Thread für deine Berechnungen ?????? 😕

    absolut Recht, so werde ich es machen.
    Aber dennoch bleibt die Frage offen, ob Threads die in OnInitDialog aufgerufen werden erst nach OnInitDialog abgearbeitet werden oder nicht.

    Nebenbei bemerkt, der Tip mit CWaitCursor hat in OnInitDialog auch nicht funktioniert...


Anmelden zum Antworten