Wie mache ich eine Dialoganwendung 100% threadsicher??



  • hello,

    ich hab mal ne allgemeine Design- frage:

    ich habe eine mfc- dialogbasierte anwendung, die verschiedene funktionen ausführt und in einem dialogfeld die ergebnisse ausgibt. die berechnungen in den funktionen und die anzeige im dialogfeld laufen als verschiedene threads (worker- und oberflächenthread).

    Nur: worauf muss ich gerade bei den threads drauf achten, damit sich die anwendung nach stunden nicht aufhängt, weil bspw das dialogfeld nicht im vordergrund ist, oder ähnliches? gibt es sowas wie eine threadüberwachung? oder gibt es dazu ein paar grundregeln die man AUF JEDEN FALL beachten muss??

    schönen dank schon jetzt!

    ole



  • Du musst Thread sync. wenn sie gleichzeitig auf die gleichen Resourcen zugreifen wollen.

    Duchsuche mal das Forum nach Thread und sync.



  • Ja, das ist klar, das hab ich mit mutexe und events gelöst; und aus meinem workerthread sende ich bei sachen die angezeigt werden sollen selbstdefinierte messages (angemeldet in der messgae map der dialogfeldklasse), die mir dann (je nach message) die richtige dialogfunktion starten, die mir dann die sachen anzeigen.

    meine befürchtung ist jetzt, dass sich mein prog irgendwann aufhängt und u.U. den ganzen rechner lahmlegt. kann man das durch eine art "IsAlive()" abfragen oder kontrollieren??

    mfg

    Ole



  • Wenn du deine Threads sauber startest, und die Synchronisation von Threads einsetzt, dann sollte eine Anwendung im Normalfall durchlaufen können, egal wie lange. Und wenn sich deine Anwengung aufhängt, dann machst du irgendwas falsch.



  • Ich schreibe von einer Threadklasse abgeleitet von CWinThread direkt in ein Control (CListCtrl, und ListBox) eines Dialogs ohne zu Sny. Warum auch. Schreibne eh nur ich rein.
    Dies Programm läuft seit 2 Jahren ohne Absturz als kleiner Server.



  • HI zusammen,

    Ich habe eine Anwendung mit mehreren Threads erstellt. Die sehen ungefähr so aus.

    main{
    AfxBeginThread...thrFunc
    }
    UINT Cklassname::thrFunc
    {
       Aufruf der Funktion: FuncArbeiten
    }
    void Cklassname::FuncArbeiten
    {
      while(Flag)
      {
      do{-.....}
      }
    }
    

    So habe ich Threads,die auf gesetzte Flags warten und andere, die die gnaze Zeit etwas machen. Habe diese jetzt nicht zuynchronisiert. Ist das denn umbedngt notwendig, wenn alle Threads unabhängig von einander sind?
    Und ein Thread, in dem die Funktion abgearbeitet ist, schließt sich auch alleine oder?
    Z.B. wenn in der Funktion "FuncArbeiten" eine abbrchbedingung erreicht wird, dann beendet sich der Thread automatisch oder??

    Sorry, wenn die Fragen nen bissel blöd sind, aber hab nicht so viel Erfahrung 🤡 .
    In den meisten Beisopielen, die ich gesehen habe wird die Synchronisation meist nur benutzt, wenn alle Threads sich "definierter"(keinen Plan) ab laufen sollen, z.b. zwei edit controls abwechselnd aktualisiert werden sollen.
    p.s.hoffe ihr findet meine while schleife nicht allzu wahnsinnig

    Danke für einen Tip.


Anmelden zum Antworten