/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Program bliver i hukommelsen!
Fra : Martin Lindemann Fre~


Dato : 20-06-03 17:16

Hejsa!

Jeg har fumlet et program sammen, der blandt andet benytter WIN INET
komponenten til FTP.

Når programmet afsluttes, og man går i taskmanager, så kan man se at
programmet stadig kører i hukommelsen, hvorfor bliver det ikke afsluttet
rigtigt?

Jeg har følgende i koden:
-------------------
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
--------------------

Samt at programmet lukker sig selv aut. via en timer løkke med IF sætninger,
afslutninge ser således ud:

--------------------------------
If step = 5 Then
Unload Me
End If
-------------------------------

Programmet forsvinder godt nok fra skærmen men IKKE fra hukommelsen

Mvh. Martin



 
 
mhabio (20-06-2003)
Kommentar
Fra : mhabio


Dato : 20-06-03 19:27

Brug Unload i stedet for End. Prøv at søg på nettet omkring problemer med
brug af END.
-------------------
Private Sub Form_Unload(Cancel As Integer)
Unload Me
End Sub
--------------------



Martin Lindemann Fre~ (20-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 20-06-03 19:27

Har jeg prøvet, samme resultat


"mhabio" <mhaNoSpamThnx@imsb.au.dk> skrev i en meddelelse
news:3ef350ef$0$15284$ba624c82@nntp03.dk.telia.net...
> Brug Unload i stedet for End. Prøv at søg på nettet omkring problemer med
> brug af END.
> -------------------
> Private Sub Form_Unload(Cancel As Integer)
> Unload Me
> End Sub
> --------------------
>
>



Tomas Christiansen (20-06-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 20-06-03 22:19

mhabio skrev:
> Private Sub Form_Unload(Cancel As Integer)
> Unload Me
> End Sub

Det giver da ingen mening at forsøge at udføre 'Unload Me' i en forms
Unload-event.
Unload-eventet er jo netop en konsekvens af at udføre 'Unload Me'!

Kun fordi VB ikke vil kalde en event-procedure rekursivt, undgår du i denne
situation at 'Unload Me' genererer Form_Unload som kalder 'Unload Me'
genererer Form_Unload som...

-------
Tomas


Neo (20-06-2003)
Kommentar
Fra : Neo


Dato : 20-06-03 19:23


"Martin Lindemann Frederiksen" <martin_NOSPAM_@mlf.dk> skrev i en meddelelse
news:3ef3334d$0$5175$edfadb0f@dread11.news.tele.dk...
> Hejsa!
>
> Jeg har fumlet et program sammen, der blandt andet benytter WIN INET
> komponenten til FTP.
>
> Når programmet afsluttes, og man går i taskmanager, så kan man se at
> programmet stadig kører i hukommelsen, hvorfor bliver det ikke afsluttet
> rigtigt?
>
snip

prøv news:3ec20096$0$83044$edfadb0f@dtext01.news.tele.dk

mvh Neo



Martin Lindemann Fre~ (20-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 20-06-03 19:36

Det virker heller ikke, den lukker ned, men programmet er stadig at se i
task manager

"Neo" <neo___dk@hotmail.removethis.com> skrev i en meddelelse
news:3ef351a2$0$83065$edfadb0f@dtext01.news.tele.dk...
>
> "Martin Lindemann Frederiksen" <martin_NOSPAM_@mlf.dk> skrev i en
meddelelse
> news:3ef3334d$0$5175$edfadb0f@dread11.news.tele.dk...
> > Hejsa!
> >
> > Jeg har fumlet et program sammen, der blandt andet benytter WIN INET
> > komponenten til FTP.
> >
> > Når programmet afsluttes, og man går i taskmanager, så kan man se at
> > programmet stadig kører i hukommelsen, hvorfor bliver det ikke afsluttet
> > rigtigt?
> >
> snip
>
> prøv news:3ec20096$0$83044$edfadb0f@dtext01.news.tele.dk



Martin Lindemann Fre~ (20-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 20-06-03 20:52

Jeg har det med komponenten fra dette program, som jeg ikke selv har lavet,
det laver samme fejl, I kan hente filen her:

http://www.mlf.dk/denzoftp.zip


"Martin Lindemann Frederiksen" <martin_NOSPAM_@mlf.dk> skrev i en meddelelse
news:3ef3334d$0$5175$edfadb0f@dread11.news.tele.dk...
> Hejsa!
>
> Jeg har fumlet et program sammen, der blandt andet benytter WIN INET
> komponenten til FTP.
>
> Når programmet afsluttes, og man går i taskmanager, så kan man se at
> programmet stadig kører i hukommelsen, hvorfor bliver det ikke afsluttet
> rigtigt?



Tomas Christiansen (20-06-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 20-06-03 23:18

Martin Lindemann Frederiksen skrev:
> Jeg har det med komponenten fra dette program, som jeg ikke selv har
lavet,
> det laver samme fejl, I kan hente filen her:
>
> http://www.mlf.dk/denzoftp.zip

Jeg har kigget lidt på dit program. Ud over at jeg på det kraftigste må
anbefale at første linie i hver source-fil altid skal være 'Option Explicit'
(uden apostroffer), har jeg fundet et par uhensigtsmæssigheder:

Når Form_Load kører, kaldes NewInet.SetInetComponent som sætter referencer
op til den form, som Form_Load kører under.
Du har nu en cirkulær reference. VB kan ikke løse cirkulære referencer for
dig - det må du klare selv.

En løsning kan være at indsætte en procedure i formen:

Private Sub Form_Unload(Cancel As Integer)
NewInet.CleanupInetComponent
End Sub

I FtpClient skal naturligvis indsættes en procedure:

Public Sub CleanupInetComponent()
CancelOperation = True
Set LocalInet = Nothing
Set ResText = Nothing
Set FormOut = Nothing
End Sub

Problemet er blot, at når man klikker på "Get Server", som udfører
Command2_Click (tåbeligt navn, iøvrigt - burde hedde GetServer_Click) og
MENS den er ved at hente filer ned, lukker formen, så går det galt. På et
tidspunkt kommer VB til at stå i GetValues$ og prøver at udføre løkken:

Do While LocalInet.StillExecuting
DoEvents
Loop

Desværre findes LocalInet ikke længere, idet det er sat til Nothing, noget
går helt galt her. Af én eller anden grund, går VB-IDE'en helt i ged, så
genvejstasterne (f.eks. F8, F5, Ctrl-C osv) ikke længere virker i VB. Jeg
ved ikke hvorfor, men formoder at det skyldes at Inet kontrollen gør knuder!

Det ser ud til at programmet fortsætter med at bruge en hel del CPU-tid i en
minuts tid, inden programmet stopper med en fejl.

Et af problemerne kan være at du i din FtpClient.cls flere steder refererer
til Form1, og hvis det sker men Form1 er ved at unloade, og rent faktisk har
unloadet den komponent, som forsøges tilgrebet, bliver form1 ganske enkelt
loadet igen (selv om den var ved at unloade)!!!

Du kunne overveje at logge hver eneste procedure/funktionskald i en fil
e(kald en log-procedure i første linie i hver procedure/funktion, som logger
procedurens/funktions navn) eller ced brug af Debug.print, og bagefter
analyserer hvor/hvad der går galt.

-------
Tomas



Martin Lindemann Fre~ (21-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 21-06-03 09:30


"Tomas Christiansen" <toc-01-nospam@blikroer.dk> skrev i en meddelelse
news:bd0142$28ea$1@news.cybercity.dk...
>
> En løsning kan være at indsætte en procedure i formen:
>
> Private Sub Form_Unload(Cancel As Integer)
> NewInet.CleanupInetComponent
> End Sub
>
> I FtpClient skal naturligvis indsættes en procedure:
>
> Public Sub CleanupInetComponent()
> CancelOperation = True
> Set LocalInet = Nothing
> Set ResText = Nothing
> Set FormOut = Nothing
> End Sub

Jeg har prøvet at indsætte do. men stadig uden held, programmet ligger
stadig i hukommelsen og hygger sig

Mvh. Martin



Tomas Christiansen (21-06-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 21-06-03 22:27

Martin Lindemann Frederiksen skrev:
> Jeg har prøvet at indsætte do. men stadig uden held, programmet ligger
> stadig i hukommelsen og hygger sig

Jo, men bliver det liggende i _mere_ end 1 minut?
Inet-controllen kan øjensynlig være meget lang tid om at afslutte sine
handlinger (jeg har observeret op til 60 sekunder).

Hvis jeg var dig, ville jeg forsøge mig med at oprette et nyt VB-projekt,
hvor AL koden ligger direkte i formen - altså ingen brug af egne
klasser/objekter.
Når (eller hvis) du får det til at virke, kan du begynde at flytte koden til
egne klasser, og derved lettere se _hvor_ det begynder at gå galt.

Jeg tror at det vil hjælpe dig til at få en større forståelse af hvilke
problemer, der kan være i den slags programmer, som du forsøger at udvikle,
og jeg tror at det i dette tilfælde er den bedste metode til at komme frem
til en fejlfrit og sikkert program.

Den sidste ting, som jeg vil nævne er, at DoEvents ofte er den _største_
synder af dem alle!!!
Når DoEvents optræder i et program, hvor man kan sætte "noget" i gang, som
kan tage adskillige sekunder, og hvor der er mulighed for at foretage
handlinger som vil/skal afbryde dette "noget", så skal man virkelig til at
have tænkeren i brug, for så er der _rigtig_ meget som kan gå galt (især med
en miljø som VB, hvor meget bliver gjort "bag ryggen" på én).

Husk på at når DoEvents udføres, kan udførelsen en vilkårlig event-procedure
påbegynde (undtagen den man selv står i - det holder VB styr på). Hvis denne
event-procedure også indholder en DoEvents, kan udførelsen af en ny
vilkårlig event-procedure påbegynde osv. Man kan altså under visse
omstændigheder risikere at flere event-procedure er i gang med at blive
udført på samme tid, og "verden" kan se meget anderledes ud, når der vendes
tilbage til linien efter DoEvents. Eksempelvis kan formen være i gang med at
undloade og alle variabler er væk.

-------
Tomas


Martin Lindemann Fre~ (22-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 22-06-03 08:51


"Tomas Christiansen" <toc-01-nospam@blikroer.dk> skrev i en meddelelse
news:bd2ifi$2po5$1@news.cybercity.dk...
>
> Jo, men bliver det liggende i _mere_ end 1 minut?
> Inet-controllen kan øjensynlig være meget lang tid om at afslutte sine
> handlinger (jeg har observeret op til 60 sekunder).

Du har fuldstændigt ret, og det løser min opgave pt., da det program, hvor
jeg har brugt dele af denzoftp, skal kun køre hver time, og det betyder
altså ikek noget.

Jeg har selv testet det, mellem 60-70 sukunder, så unloader .exe filen sig
selv som den skal!


> Hvis jeg var dig, ville jeg forsøge mig med at oprette et nyt VB-projekt,
> hvor AL koden ligger direkte i formen - altså ingen brug af egne
> klasser/objekter.

Jeg vil gerne takke for alle de gode råd, jeg er kun en "amatør-programmør
inden for VB, og har først nu begyndt at rode med mere "advancerede"
funktioner, og har så også fået nogle mere "advancerede" fejl, bla. DoEvents


Tak for hjælpen!

Mvh. Martin



Tim Sørensen (20-06-2003)
Kommentar
Fra : Tim Sørensen


Dato : 20-06-03 23:24

dim form as form
for each form in forms
unload form
next

--
Mvh.... Tim Sørensen
56º 24'209 N / 10º 55'631 E



Martin Lindemann Fre~ (21-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 21-06-03 09:32


"Tim Sørensen" <dondata@vip.cybercity.dk> skrev i en meddelelse
news:bd01ha$2959$1@news.cybercity.dk...
> dim form as form
> for each form in forms
> unload form
> next

Har jeg prøvet, men hjælper heller ikke, FTP-delen kører i en class fil...

Mvh. Martin



preben nielsen (21-06-2003)
Kommentar
Fra : preben nielsen


Dato : 21-06-03 09:20


"Martin Lindemann Frederiksen" <martin_NOSPAM_@mlf.dk> skrev i en
meddelelse news:3ef3334d$0$5175$edfadb0f@dread11.news.tele.dk...

> Når programmet afsluttes, og man går i taskmanager, så kan man
se at
> programmet stadig kører i hukommelsen, hvorfor bliver det ikke
afsluttet
> rigtigt?
>
> Jeg har følgende i koden:
> -------------------
> Private Sub Form_Unload(Cancel As Integer)
> End
> End Sub
> --------------------


Du må simpelthen aldrig bruge End. Så simpelt er det. End stopper
programmet men rydder ikke op !


--
/\ preben nielsen
\/\ prel@post.tele.dk



Martin Lindemann Fre~ (21-06-2003)
Kommentar
Fra : Martin Lindemann Fre~


Dato : 21-06-03 09:31


"preben nielsen" <prel@post.tele.dk> skrev i en meddelelse
news:3ef4153c$0$32523$edfadb0f@dread16.news.tele.dk...
> Du må simpelthen aldrig bruge End. Så simpelt er det. End stopper
> programmet men rydder ikke op !

Nej, det kan jeg se efterhånden, at man skal holde sig langt fra

Mvh. Martin



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste