|
| Deadloop Fra : news1filter@dk2net.d~ |
Dato : 07-05-01 17:34 |
|
Hey,
Jeg har et program med "deadloop". Det laver forskellige ting en gang
pr. interval (f.eks. hvert 10 min).
Mit problem er at når jeg lukker programmet så kører det videre.
Vinduet lukker men når intervallet er gået, så dukker det op igen og
laver de ting der skal gøres (i test bare en MsgBox). Programet
skifter _ikke_ processID og "Form_Terminate()" bliver ikke kaldt.
Hjælp...
| |
Asbjørn Sloth Tønnes~ (07-05-2001)
| Kommentar Fra : Asbjørn Sloth Tønnes~ |
Dato : 07-05-01 20:10 |
|
<news1filter@dk2net.dk> skrev i en meddelelse news:qijdft8hr0ptgpa1b022ikjfip3s6lcdgc@4ax.com...
> Hey,
>
> Jeg har et program med "deadloop". Det laver forskellige ting en gang
> pr. interval (f.eks. hvert 10 min).
>
> Mit problem er at når jeg lukker programmet så kører det videre.
> Vinduet lukker men når intervallet er gået, så dukker det op igen og
> laver de ting der skal gøres (i test bare en MsgBox). Programet
> skifter _ikke_ processID og "Form_Terminate()" bliver ikke kaldt.
>
> Hjælp...
>
Brug en timer sat til 600000 M$
Asbjørn
| |
Tomas Christiansen (07-05-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 07-05-01 22:52 |
|
Asbjørn Sloth Tønnesen skrev:
> Brug en timer sat til 600000 M$
Den højeste værdi man kan tildele Interval egenskaben på en Timer er
desværre kun 65535 ms (dvs. lidt over et minut), men ellers har du ret: Det
er normalt bedre at bruge en timer, frem for at bruge en løkke, når "noget"
skal gøres med faste intervaller.
Brug f.eks. en timer sat til 60000 (dvs. 1 minut), og lad den tælle en
tæller én op. Når tælleren når 10, udføres arbejdet og tælleren nulstilles.
Alternativt, hvis man af én eller anden grund, ønsker fortsat at bruge
"aktiv venten" (dvs. en løkke), kan følgende trick klare ærterne:
Private Unloading As Boolean
Private Sub Form_Load()
Me.Show
Do
'Dette er bare lykken!
DoEvents
Loop Until Unloading
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unloading = True
End Sub
-------
Tomas
| |
Deer Hunter (07-05-2001)
| Kommentar Fra : Deer Hunter |
Dato : 07-05-01 23:50 |
|
Hvad med at bruge API istedet ?
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Debug.Print "Started - " & Time()
Sleep 65536
Debug.Print "Ended - " & Time()
End Sub
"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:lOEJ6.406$%65.27107@news.get2net.dk...
> Asbjørn Sloth Tønnesen skrev:
> > Brug en timer sat til 600000 M$
>
> Den højeste værdi man kan tildele Interval egenskaben på en Timer er
> desværre kun 65535 ms (dvs. lidt over et minut), men ellers har du ret:
Det
> er normalt bedre at bruge en timer, frem for at bruge en løkke, når
"noget"
> skal gøres med faste intervaller.
>
> Brug f.eks. en timer sat til 60000 (dvs. 1 minut), og lad den tælle en
> tæller én op. Når tælleren når 10, udføres arbejdet og tælleren
nulstilles.
>
> Alternativt, hvis man af én eller anden grund, ønsker fortsat at bruge
> "aktiv venten" (dvs. en løkke), kan følgende trick klare ærterne:
>
> Private Unloading As Boolean
>
> Private Sub Form_Load()
> Me.Show
> Do
> 'Dette er bare lykken!
> DoEvents
> Loop Until Unloading
> End Sub
>
> Private Sub Form_Unload(Cancel As Integer)
> Unloading = True
> End Sub
>
> -------
> Tomas
>
>
| |
Tomas Christiansen (08-05-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 08-05-01 08:02 |
|
Deer Hunter skrev:
> Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>
> Private Sub Command1_Click()
> Debug.Print "Started - " & Time()
> Sleep 65536
> Debug.Print "Ended - " & Time()
> End Sub
Sleep er meget fint at bruge - især hvis man ønsker at benytte "aktiv
vente"-metoden.
Men man skal også passe meget på med at bruge Sleep!
I den tid programmet sover, reagerer det slet ikke på udefra kommende
påvirkninger (dvs. events), så det kan godt gå hen og blive problematisk,
hvis programmet sover et helt minut ad gangen. Prøv bare at flytte vinduet
på skærmen eller at lukke programmet ned.
Jeg vil som tommelfingerregel sige at man ikke skal lade sit program sove i
mere end 1 sekund ad gange, og personligt bruger jeg aldrig sleep med
værdier større end 100 (kombineret med brugen af DoEvents).
-------
Tomas
| |
news1filter@dk2net.d~ (08-05-2001)
| Kommentar Fra : news1filter@dk2net.d~ |
Dato : 08-05-01 13:49 |
|
> Alternativt, hvis man af én eller anden grund, ønsker fortsat at bruge
> "aktiv venten" (dvs. en løkke), kan følgende trick klare ærterne:
Undskyld den sene tilbagemelding. Men det var præcis hvad jeg skulle
bruge. Jeg takker mange gange.
Jeg troede dog at "unload" blev kaldt efter "terminate". Men åbenbart
ikke. Så hvis jeg havde været lidt kvik, så havde jeg også smidt en
MsgBox i unload eventen ;)
Men som sagt tak for hjælpen.
| |
Tomas Christiansen (08-05-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 08-05-01 14:40 |
|
news1filter skrev:
> Jeg troede dog at "unload" blev kaldt efter "terminate".
Nej. Terminate er det sidste, som hænder.
> Så hvis jeg havde været lidt kvik
Ingen kommentarer
-------
Tomas
| |
|
|