Threads aus Modulen -> Wann werden die gekillt?
Übersicht

![]() |
M0rgensternBetreff: Threads aus Modulen -> Wann werden die gekillt? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute,
Ich habe ein kleines Problem: Wenn ich das Spiel, das ich momentan schreibe, öfter hintereinander kompiliere (also kompilieren, dann aus machen, etwas ändern, wieder kompilieren etc.), dann wird mein PC irgendwann extrem langsam. Und das ist so schlimm, dass ich ihn dann irgendwann neu starten muss. Ich bin auf die Idee gekommen, dass es an einem meiner Module liegen könnte: Ich habe mir einen Logger geschrieben, der Fehler in Dateien schreiben kann. Dieser läuft in einem extra Thread, damit man jederzeit einen Fehler schreiben kann. Ich habe jetzt die Befürchtung, dass der Thread, wenn ich mein Spiel beende, nicht gekillt wird. Kann mir bitte jemand sagen, wie das in BlitzMax mit den Threads aus Modulen geregelt ist? Laufen die weiter, wenn das Programm, das sie aufgerufen hat, beendet wird oder nicht? Lg, M0rgenstern |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm normalerweise werden die Threads zu den Programmen auch beendet wenn das Programm beendet wird, ich weiss jedoch nicht, wie es ist mit dem Aufräumen des Speicher bezüglich diesem Abbruch.
Hast du schonmal die gesamte Speicherauslastung des Computers angeschaut? Oder hast du ein Memoryleak in deinem Loggermodul? |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey.
Das Verhalten ist halt sehr seltsam. Die gesamte Auslastung liegt nur so bei 12-20%. Aber mein Prozessor übertaktet halt bis zum Maximum. (Ich habe von Intel einen i7 der automatisch bis zu nem bestimmten Maximum übertaktet und auch ne Minianwendung die die Taktun angzeigt.) Aber seitdem ich das Modul im Programm nicht mehr benutze, habe ich das Problem nicht mehr. Ich finde das insofern seltsam, dass, selbst wenn der Thread nicht gekillt wird, er zumindest "schläft". Der Code, der im Thread ausgeführt wird ist der folgende: BlitzMax: [AUSKLAPPEN] Function Update:Object(ptelLogger:Object) Wenn ich mein Programm beende, rufe ich sogar shutDown() auf, wodurch getShutDown() auf true gesetzt wird. Damit müsste ja dann die Schleife beendet werden. Die Liste wird auf jeden Fall leer, weil alle Fehler in die Datei geschrieben werden. Lg, M0rgenstern |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich selbst habe nur einmal ein paar tests mit Threaded building gemacht.
Dh es gibt wohl fachlich besser geschulter leute, die dir deinen Code durchstöbern. aber eins macht mir sorge: BlitzMax: [AUSKLAPPEN] While(Not TryLockMutex(Instance().__Mutex())) Warum verpackst du die ganze if abfrage nich so, das du diese "schleife in der schleife" vermeiden kannst? Vielleicht und auch nur wirklich vielleicht, kann hier ein fehler stattfinden, je nachdem was existenz von der Mutex betrifft. Meine erste idee ist: Hauptprozess wird gekillt, Thread versucht ein letztes mal "TryLockMutex", was fehlschlägt und frisst sich in der schleife fest. Probier doch einfach mal, einen terminator mit folgendem mit in die schleife zu übernehmen: BlitzMax: [AUSKLAPPEN] While(Not TryLockMutex(Instance().__Mutex())) Vielleicht ist meine anmerkung auch einfach nur dumm und aus halbwissen zerfressen.. aber in einem normalen Singlethread programm passiert mir sowas ständig. Ich nenns 'While of death' ^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group