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

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 64

Thema: Libnodave Anwendung schliessen

  1. #1
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn ich meine Libnodave Anwendung schliesse erzeugt die Komponente jedesmal eine unschöne exception. Ich nutze Delphi und setze in meiner OnCloseQuery "nodave.active:= false;" Was muss ich nich tun damit damit keine Exception bei OnClose erzeugt wird ?!?
    Zitieren Zitieren Libnodave Anwendung schliessen  

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

    Standard

    Hab leider keine Glaskugel dabei... kannst du vielleicht noch mitteilen was für eine "unschöne Exception" das ist?

    Rufst du deine Komponente in einem Thread auf, was machst du sonst noch damit usw.?
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  3. #3
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von Human Beitrag anzeigen
    Hab leider keine Glaskugel dabei...
    Bist Du immer noch im Amerika? Und hast Deine Kugel daheim gelassen?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

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

    Standard

    Ne, bin seit Freitag wieder zurück, aber die Glaskugel hab ich daheim gelassen!
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Na ja, in der OnCloseQuery ist das nicht immer glücklich untergebracht. Man muß ja der Applikation dann auch noch die Zeit einräumen, die Verbindung zu trennen usw. Ich würde testweise mal versuchen einen Button zu nutzen, der nodave inaktiv setzt und dann die Applikation schließen. Wenn das problemlos geht, dann mal eine Wartezeit einbauen oder noch besser nachsehen, ob die Nodavekomponente irgend etwas zurück liefert, was einem anzeigt, daß sie fertig ist!
    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. #6
    Snoopy123123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.08.2006
    Beiträge
    125
    Danke
    15
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Human Beitrag anzeigen
    Ne, bin seit Freitag wieder zurück, aber die Glaskugel hab ich daheim gelassen!
    Wie ohne Glaskugel auf die Baustelle ?! Ist ja wie en Bäcker ohne Mehl....

    Ne aus der Exception Meldung denke ich kann man nicht schlau werden, hier heisst es nur exception in ***.exe aufgetreten. Ich hab mal den Assemblercode der Unterbrechungsstelle angehangen. Vielleicht kann ia jemand hier sowas lesen, ich nicht

    Dachte es gäbe vielleicht irgend etwas das ich in der Komponente noch abschalten muss bevor ich die Anwendung terminiere.

    @Ralle:

    Habe da schon meherer sekunden Zeit eingeräumt bevor endgültig geschlossen wird. Mit dem Button passiert mir das gleiche, jedoch erst wenn die Anwendung schliesse
    Angehängte Grafiken Angehängte Grafiken

  7. #7
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Bei Delphi kenne ich mich jetzt nicht wirklich aus. Aus meiner Erfahrung mit Billisoft weiß ich, dass bei entsprechenden Terminierungs-Ergeignissen schon alle anderen Threads tot sind und somit nicht mehr reagieren können.
    Was passiert eigentlich im OnClose sonst noch? Was zeigt der Debugger an, wenn weitergesteppt wird bis wieder Quellcode sichtbar ist?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

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

    Standard

    [GLASKUGEL]
    Ich denke jetzt einmal, dass du deine NoDave-Komponente in einem Thread benutzt???

    Wenn das der Fall sein sollte: Erst den Thread beenden, dann die Verbindungen beenden und dann die Anwendung schließen lassen. Ich würde das auch nicht umbedingt in das OnCloseQuery reinbauen, sondern in das OnDestroy:

    Code:
    procedure OnDestroy(Sender: TObject);
    begin
      Thread.Terminate;
      repeat
        Application.ProcessMessages;
      until Thread.Beendet;
      NoDave1.Active := FALSE;
    end;
    Dein Thread:

    Code:
    procedure TMyThread.Execute;
    begin
      Beendet := FALSE;
      repeat
        DieUndDas;
      until Terminated;
      Beendet := TRUE;
    end;
    Und dann dürfte eigentlich nichts mehr schiefgehen!

    [EDIT]
    Falls du noch irgendwo einen Timer hast, in dem du die Komponente auch noch drinnen hast, dann solltest du den auch vor dem Beenden der Verbindung auf Eis legen mit Enabled := FALSE!!!
    [/EDIT]
    [/GLASKUGEL]
    Geändert von Human (21.07.2009 um 15:28 Uhr)
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Mit Threads in Delphi muß man immer etwas herumprobieren. Ich hatte da so einige komische Ergebnisse, die ich mir nicht genau erklären konnte. Die Komponente selbst nutze ich nicht, aber ich meine, die macht intern einen eigenen Thread auf, um die Daten zu holen. Es wäre auch mal zu probieren, dem eigenen Thread (so vorhanden) ein Nil zuzuweisen, nach dem beenden und die Komponente vor dem schließen der Applikation komplett zu beenden, also mit Destroy oder einer ähnlichen Methode, die zur Verfügung steht. Mit solchen Exceptions hab ich auch lange gekämpft, da muß man leider wirklich ein wenig rumprobieren.
    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

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die NoDave-Komponente bekommt von mir niemals mehr ein Free geben beim Beenden, irgendwie hat es mir meine Programme auch immer voll mit Fehlermeldungen, das lass ich deshalb lieber Windwos erledigen!
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

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