Programmabsturz wenn Thread dialog schliesen soll?!?



  • hallo,
    folgendes problem:
    eine dialogfeldbasierte anwednung öffnet ein weiteres dialog feld,
    dort wird im onInit dialod ein thread gestartet.
    der läuft in einer while schleife,
    trifft ein bestimmter fall ein, wird die while schleife gestoppt, am ende ruft der thread die onCancel funktion auf

    //thread code
    while (m_ChkSignal == 1)
      {
      //irgendein code der im dialogfeld formularfelder rot oder grün färbt
    
      }
    CKoordinaten1::OnCancel();
    //hier endet thread
    

    start ich das program ca. 10mal stürtz es mir vielleicht 3-5mal ab.

    nehm ich den OnCancel() raus. und schlies das dialogfeld von hand, stürtz es nie ab.

    wo ist der fehler?!?!
    wird das dialogfeld geschlossen bevor der thread zu ende ist? der schreibt ja aber eigentlich nicht mehr im dialogfeld rum.
    oder muss der komplette threadcode beendet sein befor das dialogfeld geschlossen wird?
    danke schon mal
    Harald 😮



  • youCanCallMeAl schrieb:

    CKoordinaten1::OnCancel();
    //hier endet thread

    Wird bei dem "//hier endet thread" noch Code aufgeführt, der den Thread auch wirklich beendet?
    CKoordinaten1::OnCancel(); Erst aufrufen, wenn der Thread wirklich beendet ist.
    Falls noch nicht geschehen vorher noch sowas wie WaitForSingleObject() einbauen. (siehe MSDN)



  • bei, hier endet thread gibts nur noch die "}" der while schleife,
    ich muss gestehen das ich bei der erstellung des threads ziemlich "im blindflug" nach dem henkelsoft tutorial vorgegegangen bin.

    es gibt nach der "}" kein code mehr den der thread ausführen müsste,
    muss ich dan den thread noch explizit beenden?
    danke
    🙂



  • Wenn dein thread nicht auf eine Abbruchbedingung wartet, sondern nach einer Reihe von Befehlen abgearbeitet ist, dann musst du ihn nicht explizit beenden.
    Was du aber auf jeden Fall machen musst, ist zu warten, dass er wirklich beendet ist, bevor du ihm die Füße unter dem Boden wegziehst.
    Schau dir die Doku zu WaitForSingleObject() an.
    Ich hab grad keine Beispiele zur Hand, weil das ein bischen her ist, dass ich mit Threads gearbeitet habe.



  • hi zogi,
    danke schon mal,
    ich werd mir mal waitforsingleobject anschauen, hört sich so an als wäre genau das was du mit "füsse wegziehst" meinst mein problem.
    😃 😃 😃


Anmelden zum Antworten