Rechner Neustart nach Beenden des CPP-Builder Programmes!



  • Irgend etwas ist faul. Ich habe jetzt das gesamte Projekt nochmal compiliert und die Anwendung 30x auf und wieder zu gemacht. Das Problem scheint! vorerst behoben zu sein. Aber ich traue dem Frieden noch nicht. Zur Sicherheit habe ich nach dem ->Terminate() für den Thread noch ein ->WaitFor() implementiert, aber am Thread scheint die Sache nicht gelegen zu haben.
    Das Code Guard Protokoll nützt nicht viel, da ja der Rechner bei dem Fehler gleich ins nichts springt.



  • Wie wär's mit

    try { /*... */} catch(...){ /*...*/ }
    

    ?



  • Hab ich mir auch schon überlegt, bekomme ich aber dadurch so einen fetten Absturz abgefangen (PC-Neustart)?



  • Man kann es ja mal probieren... Der Absturz ist kein Fehler, sondern eine Wirkung einer Ursache... der Fehler ist dei Ursache. Bekämpfst du die Ursache, findet keine Wirkung derer statt... Physik rules 😃



  • Und wenn eine Wirkung die Ursache genau dieser Wirkung verhindert, haben wir eine Zeitanomalie. Oder so. 😃



  • Ich kann jetzt wenigsten das Neustarten des Rechners nachvollziehen. Es liegt doch irgendwie am Thread. Mein Thread wird suspended erzeugt und mit ->Resume() getstartet. Ich habe im Destruktor meiner Anwendung den Thread mit ->Suspend() gestopt und anschließend mit ->Terminate() beendet. Wenn ich jetzt (Testweise) die Funktion ->WaitFor() aufrufe, bleibt die Anwendung in einer Endlosschleife hängen. Wenn ich jetzt im CPP Builder das Programm zurücksetze tritt der Fehler auf und der Rechner bootet neu.

    Ohne den Aufrug von ->Suspend() funktioniert das Beenden mit ->Terminate() und ->WaitFor();



  • Heißt das, dass man einen angehaltenen Thread nicht Beenden kann? 😮



  • HEZ schrieb:

    Heißt das, dass man einen angehaltenen Thread nicht Beenden kann? 😮

    BCB Hilfe: TThread - Methode: Terminate().



  • Das deute ich mal als ja. 🙂 (Sorry, habe aber erst am Montag wieder die Möglichkeit die Hilfe zu bemühen oder zu testen...)



  • Beschreibung

    Terminate setzt die Eigenschaft Terminated des Thread auf true und signalisiert, daß der Thread so bald wie möglich beendet werden sollte. Im Gegensatz zu der Windows-API-Methode TerminateThread, die den Thread sofort beendet, fordert die Methode Terminate den Abbruch des Thread nur an. Dadurch kann der Thread vor seiner Beendigung noch erforderliche Aufräumarbeiten durchführen.

    Die Methode Execute eines Threads sowie alle von Execute aufgerufenen Methoden sollten die Eigenschaft Terminated regelmäßig abfragen und die Ausführung gegebenenfalls beenden.



  • Ah ja. Danke! 🙂



  • Ich habe in der Execute Methode des Threads eine while(!Terminated)-Schleife. Muss ich in der Execute Methode noch zusätzlich Aktionen ausführen, wenn Terminated = true ist? Oder reicht der Abbruch der while-Schleife aus, um den Thread sauber beenden zu können?



  • Welches Betriebssystem benutzt du eigentlich?



  • XP



  • wow. das hätte ich jetzt nicht gedacht.

    geh mal in Systemsteuerung/System/Erweitert

    Starten und Wiederherstellen - Einstellungen

    Und schalt mal "Automatisch Neustart durchführen" ab. Dann müsste man einen Bluescreen mit ner vielleicht hilfreichen Fehlermeldung bekommen.



  • Das Problem kann wohl nur durch Anschaffung von vernünftiger Hardware gelöst werden.



  • Windoof schrieb:

    Wie wär's mit

    try { /*... */} catch(...){ /*...*/ }
    

    ?

    Wie funktioniert das eigentlich?



  • Öhm... das KÖNNTE was dazu in der Hilfe stehen... 😃

    Einfach zusammengefasst: Wenn im try-Block von einem Befehl eine Exception ausgelöst wird, werden die Befehle im catch-Block ausgeführt ohne dass eine Fehlermeldung kommt (zumindest bei der "echten" Exe) und dein Programm abkackt.
    Aber stell doch bitte solche Fragen in einem extra Thread. Nachdem du die Hilfe und die Suchfunktion benutzt hast. 🙂

    (Falls du aber die genaue Funktionsweise oder die entsprechende Übersetzungmethode des Compilers wissen wolltest: :p)


Anmelden zum Antworten