Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Task wird nicht sauber beendet

0 views
Skip to first unread message

Joern Moeller

unread,
Aug 24, 1999, 3:00:00 AM8/24/99
to
Hallo,

ich habe folgendes Problem. Ein VB Programm ("VIEWER.EXE") wird gestartet
und nicht sauber beendet - es ist nur noch im Taskmanager sichtbar. Das
Programm wird aber mit End & Unload beendet! Bevor jetzt eine neue Instanz
gestartet würde, soll nach einer bestehenden gesucht werden.

'Procedure dectects a running Viewer
Sub Detect_Viewer()

Dim VIEWER As App
Dim hWnd As Long


'If Viewer is running this API call returns its handle.

hWnd = FindWindow("VIEWER", 0)
If hWnd = 0 Then
Exit Sub
End If
End Sub

...ich erhalte hier aber trotz laufender Task keine richtige Rückmeldung,
sondern immer 0!
--

Mit freundlichen Grüßen,

Joern Moeller

Stefan Ascher

unread,
Aug 24, 1999, 3:00:00 AM8/24/99
to
Hallo Joern,

> Programm wird aber mit End & Unload beendet! Bevor jetzt eine neue Instanz
> gestartet würde, soll nach einer bestehenden gesucht werden.

ich persönlich würde ein Programm nie mit End beenden.
Probier mal:
Private Sub Form_Unload(Cancel As Integer)
Set Form1 = Nothing
End Sub

Alex Deen

unread,
Aug 24, 1999, 3:00:00 AM8/24/99
to

Stefan Ascher schrieb in Nachricht ...

>Private Sub Form_Unload(Cancel As Integer)
> Set Form1 = Nothing
>End Sub


Die Idee ist löblich, leider bringt es aber nichts.
Wenn Du nicht sowieso mit Instanzen von Forms arbeitest
[ Dim frmX As Form (oder explizit As frmSowieso)

Set frmX = New Form ]

brauchst Du auch keine Referenzen zu terminieren.
Wenn man nicht höllisch aufpaßt, werden Speicherlecks auf diese Weise nicht
behoben, sondern erzeugt - weil nämlich Instanzen terminiert werden, deren
Objekte vielleicht noch gar nicht entladen sind.
Also: Nur dann Instanzen terminieren, wenn man sie auch selbst erzeugt.
Ansonsten macht VB das ja alles von selbst...


Al

Thorsten Albers

unread,
Aug 25, 1999, 3:00:00 AM8/25/99
to
Joern Moeller (joern....@gmx.net) haemmerte auf der Tastatur:
: ich habe folgendes Problem. Ein VB Programm ("VIEWER.EXE") wird gestartet

: und nicht sauber beendet - es ist nur noch im Taskmanager sichtbar. Das
: Programm wird aber mit End & Unload beendet! Bevor jetzt eine neue Instanz

: gestartet würde, soll nach einer bestehenden gesucht werden.
: ... [snip] ...

Was gibt denn das App-Objekt in der Eigenschaft PrevInstance zurück? Wenn
es TRUE ist, dann weißt Du ja, daß da noch was im Speicher hängt.

Für das saubere Beenden eines Programmes (das auch nach der MS-Doku nicht
mit End erfolgen sollte!) gibt es eine gute Kontrollmöglichkeit: das
Terminate-Ereignis jeder Form. Dieses wird erst ausgeführt, wenn die Form
entladen, alle Referenzen auf die Form auf Nothing und m.W. auch sonst
kein Code etc. der Form mehr im Speicher hängt.

Also am besten für jede Form mal in die Terminate-Ereignisprozedur
irgendeine Rückmeldung (z.B. ein Beep oder eine Messagebox mit dem Namen
der Form) setzen und dann kontrollieren, ob alle ihr Terminate-Ereignis
melden.

Ich weiß nicht, ob das wirklich alle Möglichkeiten von 'hängendem Code'
abdeckt, aber es ist ein Schritt auf dem Weg...

MfG, Thorsten Albers

--------------------------------------------------------------------------------
THORSTEN ALBERS
E-Mail-Benutzername: albers / E-Mail-Domaene: ruf.uni-freiburg.de
--------------------------------------------------------------------------------

Joern Moeller

unread,
Aug 25, 1999, 3:00:00 AM8/25/99
to
Vielen Dank, für die guten Informationen, es waren hier Forms, die nicht
sauber entladen wurden. Das Problem wurde mit unload & set ...=nothing
gelöst.
0 new messages