Rechner Neustart nach Beenden des CPP-Builder Programmes!
-
Kann es vielleicht sein, dass der Thread nicht rechtzeitig beendet wird? Also, dass er versucht, auf etwas zuzugreifen, obwohl die Anwendung schon zu ist? (Ja das klingt ziemlich dämlich.
)Versuch doch mal CodeGuard zu aktivieren, falls es den bei dir gibt. Hat bei mir manchmal bei Zugriffsverletzungen geholfen.
-
Ja, das werde ich mal machen. Deine Idee ist gar nicht schlecht! Melde mich falls das Problem behoben oder nicht behoben ist

-
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)