| |
|
|
Georg Teles | Sehr viel Wert lege ich auf ordentliche Speicherleerung, hier ein kleines Beispiel dazu
DEF SetWindowLong(3)!"USER32","SetWindowLongA"
'DEF initDLL(<Anzahl Parameter>)!"eineDLL.dll","initDLL"
'DEF DEinitDLL(<Anzahl Parameter>)!"eineDLL.dll","DEinitDLL"
Declare ende%, dll&, icon&
winmain()
activities()
aufraeumen()
Proc winmain
'dll& = UseDLL("eineDLL.dll")
'If dll&
' initDLL(<Parameter>)
'EndIf
icon& = Create("hIcon","MAIN")
Windowtitle "Titel"
Windowstyle 8+16+512'8 = Mit Icon im Fenstertitel
'512 = Dialogverhalten > nach Beendigung der Schleife wird der Code weiter ausgeführt
Window 0,0-800,600
SendMessage(%HWnd,$80,1,icon&)'Icon auf Fenstertitel setzen
SetWindowLong(%HWnd,-16,$92CA0000)'minimieren & X - Button, maiximieren deaktiviert - Vergrößern inaktiv
'SetWindowLong(%HWnd,-16,$92CE0000) 'minimieren & X - Button, maiximieren deaktiviert - Vergrößern aktiv
'SetWindowLong(%HWnd,-16,$92CB0000) 'minimieren, maiximieren & X - Button, - Vergrößern inaktiv
'SetWindowLong(%HWnd,-16,$92CD0000) 'minimieren, maiximieren & X - Button, - Vergrößern aktiv
DrawIcon icon&,10,10
Endproc
Proc activities
Clear ende%
WhileNot ende%
Waitinput
If (%Key = 2) | (%Key = 27)' X bzw. ALT + F4 oder ESC
'ShowWindow(%HWnd,0) 'um "Flackern" von Fensterobjekten zu verhindern
Inc ende%
EndIf
Endwhile
EndProc
Proc aufraeumen
DeleteObject icon&
If dll&'DLL aufräumen, eventuell DLL interne "free"-Funktion vorher aufrufen
'DEinitDLL(<Parameter>)
'FreeDLL dll&
EndIf
print "aufgeräumt ..."
WaitInput
EndProc
END
Servus |
|
|
| |
|
|
|
| Und dann kam alles anders.
Hart gesprochen - da bei solchen wie obigen Dingen das OS/ Windows selbst bei Prozessende schneller und effizienter bereinigt, als wenn man es selbst per XProfan tätentut, ist es leider Zeit und Stromverschwendung.
Kann man auch ewig streiten, ob solches "Aufräumen" damit guter oder schlechter Stil ist - auch wenn das Bedürfnis natürlich nachvollziehbar ist.
Als Frage formuliert, was einfacher ist fürs OS: 1.000 deleteObjects oder 1x "alle Objekte in Müll", wobei "alle Objekte in Müll" das OS nur selbst anweisen kann.
Ist aber nur Generve auf hohem Niveau und bei Windows kleiner NT, würde ich für meine obigen Aussagen die Hand auch nicht ins Feuer legen.
Auf der anderen Seite müsste man danach aber auch konsequent das hWnd noch zerstören und die Speicher für die Variablen und und und... macht ja auch kein Mensch. ^^ (wozu auch)
Gibt nur sehr sehr sehr wenige Funktionen bei denen in der Windows-Hilfe aufgeführt ist, dass sie Ressourcen erzeugen die den Prozess überstehen. |
|
|
| |
|
|
|
Georg Teles | Moin,
ja leider Verschwendung von Zeit & Strom, habe es mir so angewöhnt aus diesem Grund:
iF (14.02.2016)
Als Frage formuliert, was einfacher ist fürs OS: 1.000 deleteObjects oder 1x "alle Objekte in Müll", wobei "alle Objekte in Müll" das OS nur selbst anweisen kann.
ich habe keine Ahnung wann das passiert, wieso und wie das passiert gemeint habe ich aber nicht nur die DLLs sondern die Vars die auch mit DeleteObject gelöscht werden sollten, oder ist es jetzt doch egal ?
iF (14.02.2016)
Gibt nur sehr sehr sehr wenige Funktionen bei denen in der Windows-Hilfe aufgeführt ist, dass sie Ressourcen erzeugen die den Prozess überstehen.
moment mal, habe ich was nicht mitbekommen, heisst das jetzt, XProfan räumt nun beim Prozessende selber auf bzw. Windows macht das beim Programmende ? |
|
|
| |
|
|
|
| Klar, kannst Du ruhig mutig sein.
XProfans End (exitProcss) schließt Dir ja auch alle Fenster etc. -
sieht man auch selten ein DestroyWindow(hWnd) am XProfan-Programm-Ende.
Bisl was wird XProfan von sich aus entfernen -
aber sicherlich keine Fenster etc. oder Speicher die man sich holte.
Das macht Windows alles Platt weils ja keinen Prozess mehr dazu gibt und es ist dabei schneller als wenn man dies händisch tät. |
|
|
| |
|
|
|
Georg Teles | Hmm, ja %HWnd am Prozessende zu zerstören macht wenig Sinn. Was XProfan entfernt und was nicht, kann nur Roland beantworten ich bleibe erst einmal bei meiner Pingeligkeit aber ich behalte das im Auge |
|
|
| |
|
|