Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 64

Thema: Libnodave Anwendung schliessen

  1. #21
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Zitat Zitat von human
    aber wenn ich meinen Prozess beende dann gibt das Windows auch ohne, dass ich das freigebe wieder frei!
    Ich höre jetzt zum ersten Mal, dass Windows so einen intelligenten "Garbage collector" eingebaut hat...
    Google mal nach Eureka Log, dann lernst Du, wieviel Speicherlücken derartige Art der Programmierung erzeugen kann. Und vor allen Dingen hast Du dann ein Tool, mit dem man solche Speicherfresser aufspüren kann.
    Oder erzeuge mal ganz einfach in einer Applikation eine große Anzahl von Objekten dynamisch zur Laufzeit und beende Deine Applikation, ohne diese Objekte wieder freizugeben. Nach einer endlichen Anzahl von Ausführen Deiner Applikation kotzt Dir Windows entgegen, dass nicht mehr genug Speicher zur Verfügung steht
    Wenn so eine Applikation in einer 24/7 Laufzeit und in der Industrie stabil laufen soll, muss man schon etwas mehr Aufwand treiben als ein paar Komponenten auf ein Formular zu ziehen...

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren So einfach ist das nicht ...  

  2. #22
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Daumen runter

    Hallo,

    Zitat Zitat von human
    Das Destroy soll man normal nur nehmen, wenn es kein Free gibt
    Verdammt nochmal, willst Du mich nicht verstehen ?

    Wenn die Komponente statisch durch ziehen auf das Parent Formular gezogen und automatisch erzeugt wird, darfst Du niemals ein "Free" oder auch "Destroy" oder "FreeAndNil" auf diese Komponente anwenden, sonst knallt es meistens im Gebälk ...

    Gruß

    Question_mark
    Geändert von Question_mark (22.07.2009 um 22:34 Uhr) Grund: Tippfehler
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Noch einmal  

  3. #23
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Verdammt nochmal, willst Du mich nicht verstehen ?

    Wenn die Komponente statisch durch ziehen auf das Parent Formular gezogen und automatisch erzeugt wird, darfst Du niemals ein "Free" oder auch "Destroy" oder "FreeAndNil" auf diese Komponente anwenden, sonst knallt es meistens im Gebälk ...
    Nö, warum denn? Hin und wieder muss man doch mal sein Forumla aufräumen! (siehe Anhang (Formular mit TEdit und wird mit dem Button mit Free freigegeben, bei mir knallt da nix!!!))

    Und er hat niergends geschrieben wie er sie erstellt, ich erstell die immer zur Laufzeit...

    Ich höre jetzt zum ersten Mal, dass Windows so einen intelligenten "Garbage collector" eingebaut hat...
    Bin ich mal davon ausgegangen, da Windows ja für jeden Prozess einen eigenen Speicherbereich anlegt, auf das "Normalerweise" (gibt ja proktische Funktionen, mit denen man doch auf andere Programme kommt) kein anderes Programm zugreifen kann, ich lass mich natürlich auch immer gern vom Gegenteil überzeugen!
    Angehängte Dateien Angehängte Dateien
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  4. #24
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Idee

    Hallo,

    Zitat Zitat von snoopy123123
    versucht die komponente bei on close zu entfernen und selbst dann bekomm ich die Exception.
    Natürlich, weil unter Umständen der Parent, also das Delphi Formular, die Komponente schon freigegeben hat. Das ist eher zufällig bedingt, da es davon abhängt, wann Delphi die Komponente freigibt. Das hängt schon davon ab, in welcher Reihenfolge die Formulare erzeugt werden. Ist also eher etwas "unpredictable".

    Wenn Du die Komponente durch Ziehen auf das Formular erzeugt hast, dann unterlasse alle Versuche, diese irgendwann per Programmcode freizugeben.
    Damit hast Du schon mal eine Fehlerquelle ausgeschlossen.
    Dennoch besteht offensichtlich ein Problem beim Beenden des Programms und mit der Freigabe von TLibNoDave.
    Das kann eigentlich nur zwei Ursachen haben :

    1) Ein Fehler in der Komponente
    2) Ein Fehler bei der Anwendung der Komponente durch den User

    Ich halte den Punkt 2 für wahrscheinlicher, da es ja offensichtlich bei vielen anderen Anwendungen funktioniert.
    Wird die Komponente eventuell aus einem TimerEvent oder einem Thread aufgerufen, der noch nicht beendet wurde, bevor der Parent der Komponente von Delphi freigegeben wurde. Dann ist auch die Komponente zerstört und dann gibt es die von Dir beschriebenen Exceptions.
    Und dann setze mal einen Breakpoint in das OnClose Event des ParentForm der Komponente. Und schaue mal, ob dort der Zeiger auf LibNoDave beim Eintritt in den Event schon auf NIL gebogen ist ...

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Delphi hat auch einen Debugger ...  

  5. #25
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Reden

    Hallo,

    Zitat Zitat von human
    Nö, warum denn? Hin und wieder muss man doch mal sein Forumla aufräumen! (siehe Anhang (Formular mit TEdit und wird mit dem Button mit Free freigegeben, bei mir knallt da nix!!!))

    Und er hat niergends geschrieben wie er sie erstellt, ich erstell die immer zur Laufzeit...
    Snoopy hat schon geschrieben, dass die Komponente durch ziehen auf das Formular automatisch erzeugt wird ...

    Ich respektiere natürlich Deinen Umgang mit der Erzeugung und Freigabe von Komponenten in Delphi, allein Deine Meinung teile ich nicht mit Dir.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Dann mach mal so weiter  

  6. #26
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Wie gesagt, gerade die Threads in Delphi sind oft etwas eigen. Mal kann man sie nicht abschießen, mal beendet man sie, aber sie verschwinden einfach nicht komplett, sondern vegetieren als "Leiche" vor sich hin. Das ist etwas mystisch und erfordert einiges an Testerei. (Delphi7)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #27
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Ich respektiere natürlich Deinen Umgang mit der Erzeugung und Freigabe von Komponenten in Delphi, allein Deine Meinung teile ich nicht mit Dir.
    Naja, ich programmiere so eigentlich auch nie, aber dass es nicht geht oder mit deinen Worten dass es dann im Gebälk mächtig splittert stimmt ja auch nicht ganz!

    Wie gesagt, gerade die Threads in Delphi sind oft etwas eigen. Mal kann man sie nicht abschießen, mal beendet man sie, aber sie verschwinden einfach nicht komplett, sondern vegetieren als "Leiche" vor sich hin. Das ist etwas mystisch und erfordert einiges an Testerei. (Delphi7)
    Das ändert sich auch nicht mit den neueren Versionen...
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  8. #28
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Ralle
    Das ist etwas mystisch und erfordert einiges an Testerei.
    Das ist in keiner Weise mystisch oder rätselhaft, sondern erfolgt nach streng (vom OS ) vorgegebenen Regeln. Und die VCL von Delphi ist eben nicht threadsafe, d.h. wenn Du aus einem erzeugten Thread die Delphi VCL ansprichst und die Spielregeln über "Synchronize" nicht beachtest, knallt es eben. Das ist aber kein Fehler in Delphi, sondern vom Programmierer, und das Problem dürfte wohl in den meisten Hochsprachen bestehen.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Programme können auch Zufallsgeneratoren sein *gg*  

  9. #29
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Zitat Zitat von Question_mark Beitrag anzeigen
    Das ist in keiner Weise mystisch oder rätselhaft, sondern erfolgt nach streng (vom OS ) vorgegebenen Regeln. Und die VCL von Delphi ist eben nicht threadsafe, d.h. wenn Du aus einem erzeugten Thread die Delphi VCL ansprichst und die Spielregeln über "Synchronize" nicht beachtest, knallt es eben. Das ist aber kein Fehler in Delphi, sondern vom Programmierer, und das Problem dürfte wohl in den meisten Hochsprachen bestehen.
    Damit hab ich eigentlich keine Probleme, alles was ein Thread wissen muss kriegt er direkt nach dem Erstellen von mir gesagt und wird dann erst gestartet oder eben wie erwähnt über Synchronize.

    Das mysteriöse bei den Threads ist das Beenden (siehe http://www.sps-forum.de/showthread.php?t=29029 (der Teil mit Assigned(), den ich ausgeklammert habe), irgendwo schwirrt der noch rum, aber ist niemals vollkommen ganz weg.
    FreeOnTerminate hilft nicht, Free auch nicht...
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  10. #30
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    @human : hast du schonmal vor dem Terminate ein "Suspend" versucht ???

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Hmm  

Ähnliche Themen

  1. Antworten: 39
    Letzter Beitrag: 06.04.2011, 19:55
  2. WinCC 5.1 Externe Anwendung schliessen
    Von repök im Forum HMI
    Antworten: 0
    Letzter Beitrag: 01.10.2009, 08:32
  3. Themen schliessen
    Von Brro87 im Forum Stammtisch
    Antworten: 15
    Letzter Beitrag: 14.01.2009, 08:47
  4. WinCC: Faceplate schliessen mit C-Sript
    Von kipphase im Forum HMI
    Antworten: 0
    Letzter Beitrag: 08.04.2008, 07:46
  5. WinCC: Meldearchiv per Skript schliessen
    Von Grosser im Forum HMI
    Antworten: 1
    Letzter Beitrag: 02.05.2007, 06:42

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •