Offensichtlich MemoryLeak Probleme mit _GuiCtrlSetFont

  • Hi,

    ich schreibe eine kleine Grafik+Sound Demo in AutoIt. Eigentlich war es nur eine Info-Box eines Programms zum verschlüsseln
    von Daten , aber sie ist immer größer geworden. Ich nutze u.a. folgende Func hier aus dem Forum:

    Func _GuiCtrlSetFont($controlID, $size, $weight = 400, $attribute = 0, $rotation = 0, $fontname= "", $quality = 2)
    Local $fdwItalic = BitAND($attribute, 1)
    Local $fdwUnderline = BitAND($attribute, 2)
    Local $fdwStrikeOut = BitAND($attribute, 4)

    ReDim $ahFontEx[UBound($ahFontEx) + 1]
    $ahFontEx[0] += 1

    $ahFontEx[$ahFontEx[0]] = _WinAPI_CreateFont($size, 0, $rotation * 10, $rotation, $weight, $fdwItalic, _
    $fdwUnderline, $fdwStrikeOut, -1, 0, 0, $quality, 0, $fontname)

    GUICtrlSendMsg($controlID, 48, $ahFontEx[$ahFontEx[0]], 1)
    EndFunc

    Diese wird in 2 Do Schleifen nacheinader jeweils aufgerufen und verändert den jeweiligen Label immer ein wenig. Problem ist nur, das
    irgendwann meine ganze GUI weiss wird, als würde ich einen MemoryLeak durch sie bekommen...

    Wenn ich herausgefunden habe, wie ich hier die komplette Demo anhängen kann, bzw. nur den Downloadlink zur ZIP Datei posten kann,
    folgt diese natürlich ;)

    Gruß
    Cape-City

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2

  • Diese wird in 2 Do Schleifen nacheinader jeweils aufgerufen und verändert den jeweiligen Label immer ein wenig. Problem ist nur, das
    irgendwann meine ganze GUI weiss wird, als würde ich einen MemoryLeak durch sie bekommen...

    Wenn ich herausgefunden habe, wie ich hier die komplette Demo anhängen kann, bzw. nur den Downloadlink zur ZIP Datei posten kann,
    folgt diese natürlich

    Hallo @Cape-City,
    du müsstest wohl mehr von deinem Skript zeigen. Diese Funktion alleine hilft eher nicht..
    Nimm mal testweise eine For-To-Schleife (die auf jeden Fall endet), statt deiner Do-Until Variante. Vielleicht hast du dich bei einer deiner Until-Bedingungen etwas vertan und sie wird nie erfüllt? (Dann würde das Skript ja die ganze Zeit in der Schleife hängen).

    Übrigens sieht das hier unten ziemlich krude aus. Man kann das wohl so machen, aber wahrscheinlich geht das besser.

    ReDim $ahFontEx[UBound($ahFontEx) + 1]
    $ahFontEx[0] += 1

    $ahFontEx[$ahFontEx[0]] = ...

    Grüße autoiter

  • Hi,

    ich habe die o.g. Funktion einmal komplett übergangen und direkt dort wo ich sie aufgerufen habe folgendes eingefügt:

    GUICtrlSendMsg($iMessage[2], 48, _WinAPI_CreateFont(16, 0, $iScrollPos * 10, 0, $FW_BOLD, 0, 0, 0, -1, _
    0, 0, 2, 0, "Franklin Gothic Medium"), 1)

    Aber auch hier hängt sich die GUI irgendwann weg, also scheint es wohl am zu häufigen Aufruf von _WinAPI_CreateFont
    zu liegen. In der Funktion hatte ich nämlich ein Überlaufen des Arrays in Verdacht, aber das habe ich ja nun nicht mehr....

    Kommentiere ich den Part komplett aus, bleibt die GUI auch nach Minuten stabil, also muss ich hier irgendwo dran liegen.

    Gruß
    CC

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2

  • Hey @Cape-City,
    das ist kein sinnvoller Beitrag. Ich habe den Fehler nicht gefunden und konnte auch kein Speicherleck feststellen.
    Ab einem gewissen Zeitpunkt wurde die GUI einfach nicht mehr korrekt dargestellt. Vielleicht wird nicht richtig hinter den GDIPlus-Befehlen aufgeräumt? Ich habe mit GDIPlus aber bisher so gut wie nichts gemacht und keine Ahnung.

    Ich habe mir nur gedacht, dass du Rückmeldung verdienst und bekommen solltest, weil du auch noch keine Beiträge hattest. Es gibt ja wenig Schlimmeres, als wenn man sich aus der Deckung wagt und keiner reagiert. ;)
    Die Demo sieht für mich sehr gut aus! Ich hoffe, es meldet sich bald ein Kenner, der dir helfen kann :)

    Grüße autoiter

  • Ok,

    Code
    Global $xFontNew = False
    [...]
    Func ColorRotate()
    [...]
    If $xFontNew Then _WinAPI_DeleteObject($xFontNew)
    $xFontNew = _WinAPI_CreateFont(16, 0, $iScrollPos * 10, 0, $FW_BOLD, 0, 0, 0, -1, 0, 0, 2, 0, "Franklin Gothic Medium")
    GUICtrlSendMsg($iMessage[2], 48, $xFontNew, 1)
    [...]
    EndFunc


    scheint das Problem zu lösen oder zumindest weiter hinaus zu zögern. Den Handle (ich denke das es einer ist) kann ich erst wieder freigeben, bevor ich _WinAPI_CreateFont neu aufrufe, da die Ausgabe sonst nicht den gewünschten Effekt hat.

    Ich werde weiter testen ;) und berichten.

    Ich würde ja gerne noch eine Art "Wobbler" für den Text schreiben, habe aber noch keine Idee wie ich das umsetzen kann.
    Ach, ich fühle mich gerade in die Zeit der guten alten HomeComputer zurück versetzt :)

    Dateianhang im 3. Beitrag wurde aktualisiert.

    Gruß
    CC

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2

    2 Mal editiert, zuletzt von Cape-City (27. November 2016 um 12:58)

  • Hi @autoiter

    Hey @Cape-City,
    das ist kein sinnvoller Beitrag. Ich habe den Fehler nicht gefunden und konnte auch kein Speicherleck feststellen.
    Ab einem gewissen Zeitpunkt wurde die GUI einfach nicht mehr korrekt dargestellt. Vielleicht wird nicht richtig hinter den GDIPlus-Befehlen aufgeräumt? Ich habe mit GDIPlus aber bisher so gut wie nichts gemacht und keine Ahnung.

    Ich habe mir nur gedacht, dass du Rückmeldung verdienst und bekommen solltest, weil du auch noch keine Beiträge hattest. Es gibt ja wenig Schlimmeres, als wenn man sich aus der Deckung wagt und keiner reagiert. ;)
    Die Demo sieht für mich sehr gut aus! Ich hoffe, es meldet sich bald ein Kenner, der dir helfen kann :)

    Ich danke Dir für Deine Rückmeldung und ich sehe es genauso, ich hoffe nur Du meinst nicht meinen Beitrag hier als nicht sinnvoll ;)
    Es freut mich, das die Demo Dir gefällt!

    Gruß
    CC

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2