Dialog mit Thread automatisch schließen



  • Hallo,
    ich hab ein Dialog in dem bei OnInitDlg ein Thread gestartet wird mit

    CWinThread* pThreadProgressbar = AfxBeginThread (ThreadProcProgressbar, this);
    
    UINT CDlgKommunikation1::ThreadProcProgressbar(LPVOID pParam)
    {
        CDlgKommunikation1* pDlg = (CDlgKommunikation1*) pParam;
        pDlg->ThreadProgressbarRun();
        return 0;
    }
    
    void CDlgKommunikation1::ThreadProgressbarRun(void)
    {   
        //Starten der Fortschrittanzeige
        int nInc = 0;
        m_Progress.SetRange(0,100);
        while (m_ThreadFlag)
        {
            nInc++;
            m_Progress.SetPos(nInc);
            Sleep(10);
            if (nInc >= 100)
                m_ThreadFlag = 0;
        }
    }
    

    Und jetzt würde es mich sehr freuen, wenn der Dialog sich automatisch schließt wenn die Fortschrittanzeige bei 100 angelangt ist.
    Ich hab mir gedacht ich ruf einfach OnOK() auf , hab das auch an verschiedenen Stellen schon versucht, aber er schmiert immer ab.
    Für jeden Tip bin bich dankbar.

    [ Dieser Beitrag wurde am 04.04.2003 um 15:17 Uhr von dscho editiert. ]



  • Erstell doch den Dialog im Thread!



  • Danke für Deine Antwort. Das hab ich mir auch schon ein bischen überlegt aber hab mich dann doch für diese Variante entschieden.
    Gibts hierfür auch ne Möglichkeit?





  • Der Link hat mir nicht so recht geholfen. Ich möchte nicht den Thread beenden von auserhalb. Der wird doch sauber beendet denke ich jedenfalls. Ich würde gern, das der Dialog geschlossen wird wenn der Thread beendet wird.

    Oder kann ich aus Deinen Antworten schließen, daß das nicht möglich ist?



  • Gib doch erstmal die Gründe an, warum Du Dir überlegt hast, den Dialog, der ausserhalb erstellt wurde, im Thread zu beenden, obwohl es durchaus passieren kann, dass der Hauptthread gerade darauf zugreift!



  • nun ja ganz einfach, weil ich das Tutorial von Erhard Henkes mir angeschaut hab und es da halt mit nem Dialog gemacht wird und auch funktioniert.
    Die alternative wäre doch ich starte einen Thread, der macht:
    1. nen Dialog
    2. erfüllt seine Arbeiten
    3. beendet sich
    4. schließt den Dialog
    Aber ich hab nich so ganz den durchblick wie ich das lösen kann 🙄
    deshalb hab ich es ncht so gemacht. Un ich dachte es geht auch so wie ich es gemacht hab oder hab ich da einen Denkfehler?

    Ich starte meinen Thread der arbeitet diese Schleife
    while (m_ThreadFlag)
    {
    nInc++;
    m_Progress.SetPos(nInc);
    Sleep(10);
    if (nInc >= 100)
    m_ThreadFlag = 0;
    }
    ab und wenn die 100 voll sind wird die Schleife beendet und somit auch der Thread oder nicht???
    Wenn das so ist, das der Thread beendet ist, dann hab ich doch ein simples Dialogfenster, das ich nur noch schließen muß. Ich dachte dan an so etwas wie ein Event den ich abfangen kann und da für ich dan OnOK aus.

    Bitte nochmal um Hilfe



  • Es gibt wirklich nur wenige Anwendungen, wo es unbedingt notwendig ist, dass ein Objekt, welches in Thread A erstellt wird, von Thread B 'ausradiert' werden muss.
    Und einen Dialog im Thread zu erstellen, wo sollte da das Problem sein?



  • Du hast recht ich hab mir das alles nochmal überlegt und ich habs geschafft.
    Danke


Anmelden zum Antworten