Threads



  • Hi gibts ne Möglichkeit das folgendermaßen zu handeln :

    int Funktion()
    {
    ...     // fange an etwas zu tun
    
    AfxBeginThread(thrdFunc,this);	 // starte Thread
    
    if(AfxEndThread(n,1))
    {
    ...     // wenn thread beendet ist, weitermachen
    
    }
    
    }
    

    Also das ich praktisch die Funktion warten lasse bis er mit dem Thread fertig ist.



  • die funktion wird nicht warten - das ist ja der sinn eines threads - due funktion laeuft durch und der thread laeuft separat weiter
    am besten du sendest dann vom thread heraus eine "bin fertig" message die du abfaengst
    also

    thread starten
    dialog fuer bitte wartem modal starten
    wenn thread fertig ist, eine "bin fertig" message an den bitte warten dialog senden,
    diese beendet sich und das programm kann weiter machen


  • Mod

    1. AfxEndThread terminiert den aktuellen Thread und keinen anderen Thread.
    2. Kannst Du mit dem returnierten CWinThread prüfen ob der Thread noch aktiv ist, solange m_bAutoDelete nicht gesetzt ist!



  • Danke aufjedenfall für die Antworten, ich habs jetzt das Programm einfach ein bischen umgeschrieben, damit ich eben beim starten des Threads schon am Ende der Funktion bin...



  • Hmmm also ich hab jetzt ein anderes Problem, aber es geht wieder um Threads.

    Ich hab folgenden Thread um eine Datei auf einen FTP hochzuladen :

    ...
    
    while(...)   // Datei wird gelesen
    {
    
    ...  // Datei wird auf den FTP geschickt
    
    if(pThis->Beenden == 1)   // Beenden Button wurde gedrückt
        {
         ...   // wurde beendet
    
        }
    
    }
    

    Während des Uploads wird mein Hauptprogramm geschlossen und ein Dialogfeld öffnet sich. In diesem Dialogfeld will eben einen 'Abbrechen' Button verwenden.
    Leider funktionierts irgdnwie nicht :

    void CFenster::OnBnClickedButton3()
    {
    
    CFTP2Dlg *m_dlg;
    m_dlg->Beenden = 1;
    
    }
    

    Damit will ich eben Beenden auf '1' stellen um das Uploaden zu beenden, aber statdessen bekomme ich eine Fehlermeldung 😞 Mein Programm stürtzt ab, weiss einer warum ?



  • ok habs schon, hab einfach Beenden als Variable vom neuen Dlg gemacht und greife jetzt anders auf ihren Wert zu, passt


Anmelden zum Antworten