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

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 64

Thema: Libnodave Anwendung schliessen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Suspend unterbricht nur die Ausführung der Threads temporär und wird nicht beendet:

    Auszug aus der Delphihilfe:
    Mit Suspend können Sie die Ausführung eines Thread temporär unterbrechen. Mit Resume kann die Ausführung anschließend wieder aufgenommen werden. Suspend-Aufrufe können verschachtelt sein. Entsprechend oft muss dann aber auch Resume aufgerufen werden, bevor der Thread fortgeführt wird.
    Und Terminate macht ja auch nix was wirklich intern verwendet wird, sondern nur als "Programmierhilfe" bereitgestellt wird um Threads, die ständig im Hintergrund laufen, zu beenden, wenn die Eigenschaft "Terminated" auf TRUE steht:

    procedure TThread.Terminate;
    begin
    FTerminated := True;
    end;
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

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

    Idee

    Zitat Zitat von human
    Das Suspend unterbricht nur die Ausführung der Threads temporär und wird nicht beendet:
    Es ist eigentlich völlig überflüssig, dass Du mir die Funktion "Suspend" erklären willst ... Es kann nur verhindern, dass Deine App vor dem Terminate versucht noch auf VCL Elemente zuzugreifen, der Thread ist dann eben eingeschlafen ...

    Gruß

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

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

    Standard

    Hallo,

    Und Terminate macht ja auch nix was wirklich intern verwendet wird, sondern nur als "Programmierhilfe" bereitgestellt wird um Threads, die ständig im Hintergrund laufen, zu beenden, wenn die Eigenschaft "Terminated" auf TRUE steht:
    Da hast Du allerdings übersehen, dass in den gängigen Hochsprachen jedes Property die Eigenschaft "read" und "write" hat und dementsprechend beeinflusst werden kann.

    Gruß

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

  4. #34
    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
    Hallo,



    Da hast Du allerdings übersehen, dass in den gängigen Hochsprachen jedes Property die Eigenschaft "read" und "write" hat und dementsprechend beeinflusst werden kann.

    Gruß

    Question_mark
    property Terminated: Boolean read FTerminated;
    Aber irgendwie kommt mir das vor, als wenn wir gerade über Äpfel (Thread greift auf VCL-Komponenten zu) und Birnen (Thread ist nach beenden immernoch (zumindest teilweise) da und lässt sich nicht komplett entfernen) sprechen...
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  5. #35
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Zitat Zitat von Human Beitrag anzeigen
    Aber irgendwie kommt mir das vor, als wenn wir gerade über Äpfel (Thread greift auf VCL-Komponenten zu) und Birnen (Thread ist nach beenden immernoch (zumindest teilweise) da und lässt sich nicht komplett entfernen) sprechen...
    Ja, ich kenne dieses eigenartige Verhalten auch. Es hat mich enorm viel Arbeit gekostet, das irgendwie hinzubasteln. Threads, die ich nochmal brauche halte ich an und benutze sie später wieder, völlig weg bekommt man die einfach nicht.

    @qm
    Ja qm, wir sind ja nun auch nicht total dämlich, Synchonize kenn ich grad noch. Leider macht das oft, den Geschwindigkeitsvorteil eines eigenen Thread wieder zunichte, weil auf irgendwelche Dinge vom BS gewartet wird.

    Und klar folgt das OS strengen Regeln, sonst ginge gar nichts mehr und das sofort. Das Hauptprolem ist oft, daß man X verschiedene Komponenten, von X unterschiedlichen Herstellern, alle mit unterschiedlicher Qualität, nutzt. Da funkt schnell mal etwas dazwischen, ohne das man das so einfach rausbekommt. Wird bei der Exception, wie oben beschrieben, auch ein ähnliches Problem sein.
    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

  6. #36
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Als (Mit-)Verantwortlicher für diesen Thread muß ich mich wohl auch mal einmischen:

    Ich glaube nicht, daß das Ausgangsproblem was mit Threads zu tun hat. Aus den Ausführungen über das Problem bin ich allerdings nicht wirklich schlau geworden, da wären ein paar Zeilen Quelltext oder zumindest Teile davon bestimmt nicht schädlich gewesen. QM hat zwar recht mit seinen Ausführungen, daß nur Komponenten, die zur Laufzeit aus dem Programmcode heraus erzeugt werden (mit NIL als AOwner), später per .Free (oder mit FreeAndNil) im Code wieder freigegeben werden dürfen, aber auch das ist ja laut Snoopy123123 nicht die Ursache.

    Ein grundsätzliches Problem der Komponente kann ich ausschließen, dafür ist die bei uns zu häufig im Einsatz. Ohne weitere Infos ist das hier also nur ein Stochern im Nebel.


    Gruß Axel
    Man muß sparn wo mn knn!

  7. #37
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Ja, ich kenne dieses eigenartige Verhalten auch. Es hat mich enorm viel Arbeit gekostet, das irgendwie hinzubasteln. Threads, die ich nochmal brauche halte ich an und benutze sie später wieder, völlig weg bekommt man die einfach nicht.
    Ganz offen gestanden kann ich das Problem nicht nachvollziehen. Ich habe einige Systemdienste programmiert, die über Wochen und Monate laufen und dabei mehr oder weniger permanent neue Threads erzeugen (einige Threads pro Minute) und wieder beenden, und da bleibt nichts übrig, was nicht völlig weg zu bekommen ist.

    Das Hauptproblem beim Verwenden von Threads liegt IMHO darin, daß ein Thread möglichst auf nichts von der VCL zugreifen sollte, was nicht komplett innerhalb des Threads erzeugt wurde. Und mit innerhalb des Threads meine ich ausschließlich in der Execute-Methode, da die Methoden Create und Co. noch innerhalb des Threads aufgerufen werden, in dem die TThread-Klasse instanziert wird.

    Und zum Thema Suspend und Terminate:
    Suspend legt den Thread schlafen, das ist richtig, aber terminiert wird ein Thread nur, wenn die Execute-Methode verlassen wird. Ein schlafender Thread wird also erst terminiert, nachdem er wieder aufgeweckt wurde. Und Terminate fordert zwar tatsächlich nur die Execute-Methode durch setzen der Terminated-Eigenschaft auf, sich zu beenden, aber für den Code in Execute ist man selbst verantwortlich, und muß dann die Eigenschaft Terminated entsprechend berücksichtigen. Wenn die Execute verlassen wird, wird der Thread dann auch ordnungsgemäß beendet, jedenfalls laut meinen Erfahrungen. Und bei gesetzten FreeOnTerminate wird auch der von TThread belegte Speicher ordentlich wieder freigeräumt.


    Gruß Axel
    Man muß sparn wo mn knn!

  8. #38
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Zugriff auf Komponenten oder die Applikation an sich, nehme ich natürlich nur über Synchonize. Ich hatte schon Thread, die sich trotz aller Versuche geweigert haben das OnTerminate-Ereignis zu bringen. Nach meiner bisherigen Erfahrung passiert das tatsächlich nie mit kleinen Testanwendungen. Erst wenn es dann größer und verwickelter wird (Clientfenster, viele Komponenten etc.) passiert das dann irgendwann. Im Moment hab ich einen SQL-Server, der direkt in meine Anwendung integriert ist. Unter bestimmten, nachvollziehbaren Voraussetzungen löse ich da auch eine Exception aus, kann aber nicht herausfinden woran das genau liegt (keine Quellcode, lohnt nicht, den zu kaufen). Aber in einer kleinen Testanwendung passiert das nicht. Da darf man sich dann einen Wolf suchen, wahrscheinlich hab ich denn auch doch zu wenig Ahnung von den wirklichen Internas von VCL, Delphi, Windows. Aber das will ich ja eigentlich auch gar nicht, dann wär ich C-Programmierer geworden.
    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

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

    Standard

    Zitat Zitat von afk Beitrag anzeigen
    Das Hauptproblem beim Verwenden von Threads liegt IMHO darin, daß ein Thread möglichst auf nichts von der VCL zugreifen sollte, was nicht komplett innerhalb des Threads erzeugt wurde. Und mit innerhalb des Threads meine ich ausschließlich in der Execute-Methode, da die Methoden Create und Co. noch innerhalb des Threads aufgerufen werden, in dem die TThread-Klasse instanziert wird.


    Zitat Zitat von afk Beitrag anzeigen
    Und zum Thema Suspend und Terminate:
    Suspend legt den Thread schlafen, das ist richtig, aber terminiert wird ein Thread nur, wenn die Execute-Methode verlassen wird. Ein schlafender Thread wird also erst terminiert, nachdem er wieder aufgeweckt wurde. Und Terminate fordert zwar tatsächlich nur die Execute-Methode durch setzen der Terminated-Eigenschaft auf, sich zu beenden, aber für den Code in Execute ist man selbst verantwortlich, und muß dann die Eigenschaft Terminated entsprechend berücksichtigen.
    immernoch

    Zitat Zitat von afk Beitrag anzeigen
    Wenn die Execute verlassen wird, wird der Thread dann auch ordnungsgemäß beendet, jedenfalls laut meinen Erfahrungen. Und bei gesetzten FreeOnTerminate wird auch der von TThread belegte Speicher ordentlich wieder freigeräumt.
    Um mal auf wieder auf das andere Thema zu verweisen (http://www.sps-forum.de/showthread.p...828#post207828), 2. Punkt, dass ich das "not Assigned(ReadThread)" habe, das musste ich machen weil der Thread, trotz FreeOnTerminate und FreeAndNil, immernoch irgendwo rumschwirrt, zwar nichts macht, aber irgendwas ist da noch, wie so ein böser Dämon!
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  10. #40
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Human Beitrag anzeigen
    Um mal auf wieder auf das andere Thema zu verweisen (http://www.sps-forum.de/showthread.p...828#post207828), 2. Punkt, dass ich das "not Assigned(ReadThread)" habe, das musste ich machen weil der Thread, trotz FreeOnTerminate und FreeAndNil, immernoch irgendwo rumschwirrt, zwar nichts macht, aber irgendwas ist da noch, wie so ein böser Dämon!
    Zu dem Punkt hab ich mittlerweile in dem entsprechenden Thread eine Antwort geliefert (siehe hier).


    Gruß Axel
    Man muß sparn wo mn knn!

Ä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
  •