![]() |
AW: Record New/Dispose resultiert in MemoryLeaks
Eben drum habe ich da Bauchschmerzen!
Gruß K-H |
AW: Record New/Dispose resultiert in MemoryLeaks
Ich muss in manchen Fällen 3 verschiedene Dateninformationen schicken.
2 davon sind für die GUI, die dritte für ein case-of. Das funktioniert aber leider nur mit dem WndProc() MessageHandler. Mit einem eigenen wäre mir das lieber, dadurch verliere ich aber von den 3 Plätzen schonmal einen, um den MessageHandler anzugeben. Daher die Record-Geschichte. |
AW: Record New/Dispose resultiert in MemoryLeaks
Zitat:
|
AW: Record New/Dispose resultiert in MemoryLeaks
Zitat:
@Glados: Von wo nach wo werden denn die Nachrichten versendet? Von einem Formular zum anderen? IIRC ist es doch so, dass solche Nachrichten gar nicht in der Message Queue von Windows landen sondern direkt vom Formular verarbeitet werden. Andererseits passt die Anzahl der Lecks exakt zu dem Limit der Message Queue von 10k ... Grüße Dalai |
AW: Record New/Dispose resultiert in MemoryLeaks
Das mit dem 10.000-Limit wusste ich nicht.
Dann wäre es glaube ich das Beste, wenn ich das mit dem Record sein lasse und Strings stattdessen so mitschicke
Delphi-Quellcode:
Ich schicke aus einem Thread heraus.
PostMessage(receiver, command, wParam, LPARAM(PChar('string')));
Habe meinen Branch vorsichtshalber mal hard-resetet. Ich denke eine andere Lösung ohne records ist doch wesentlich besser. Eine eigene MessageQueue ohne das 10.000-Limit ggf. Aber das ist sicher nicht möglich. |
AW: Record New/Dispose resultiert in MemoryLeaks
Zitat:
Im Falle von:
Delphi-Quellcode:
kannst du nie sicher sein, ob
var
S: String; begin S := 'blabla'; PostMessage(receiver, command, wParam, LPARAM(PChar(@S[1]))); // ... S := '123';
Delphi-Quellcode:
noch
S
Delphi-Quellcode:
oder schon
'blabla'
Delphi-Quellcode:
enthält, wenn deine Nachricht bearbeitet wird. Selbes gillt natürlich für den Falle, dass der Thread den String in jeder Iteration modifiziert.
'123'
Ich kann dir nur nochmal raten von dem ganzen Message Gefummel zurück zu
Delphi-Quellcode:
zu wechseln. Da musst du dir weder um manuelle Speicherverwaltung, noch um irgendwelche Message-Queue Limits oder andere Edgecases Gedanken machen.
TThread.Queue
|
AW: Record New/Dispose resultiert in MemoryLeaks
Zitat:
Jedoch würde ich aus den Threads eine Prozedur in einer anderen Unit aufrufen (mit Übergabe der Thread-ID), um einige unnötige Zeilen (
Delphi-Quellcode:
) zu sparen.
Queue(nil{* <= kommt hier dann die Thread-ID hin? *}, procedure begin end);
Ich melde mich sobald ich alles umgebaut habe. |
AW: Record New/Dispose resultiert in MemoryLeaks
Statt der ThreadId, musst du die Instanz des aufrufenden Threads also
Delphi-Quellcode:
als Parameter vom Typ
Self
Delphi-Quellcode:
übergeben, aber dann sollte es ohne Probleme funktionieren die Funktion auszulagern :)
TThread
|
AW: Record New/Dispose resultiert in MemoryLeaks
Ok danke ich melde mich :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz