/ 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
Delay, Wait, Sleep?
Fra : Bjørn


Dato : 05-03-02 12:56

Hvad dævlen hedder den funktion i VB6...

I C++ hedder den Sleep(x) hvor x er i ms.
Har set flere basic varianter hvor enten delay eller wait virker... Men jeg
kan dælme ikke hitte ud af det i VB6 :-/

--
Mvh Bjørn
Bil- og computernød



 
 
Jens Vestergaard (05-03-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 05-03-02 13:03


"Bjørn" <b.norgaaard@wanadoo.dk> skrev i en meddelelse
news:a62bqr$1ct$1@sunsite.dk...
> Hvad dævlen hedder den funktion i VB6...
>

I modul:
Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds
As Long)

I din kode:
Sleep(500) '500 ms

--
mvh
Jens Vestergaard
www.railsoft.dk



Jan V. (05-03-2002)
Kommentar
Fra : Jan V.


Dato : 05-03-02 13:01


"Bjørn" <b.norgaaard@wanadoo.dk> skrev i en meddelelse
news:a62bqr$1ct$1@sunsite.dk...
> Hvad dævlen hedder den funktion i VB6...
>
> I C++ hedder den Sleep(x) hvor x er i ms.
> Har set flere basic varianter hvor enten delay eller wait virker... Men
jeg
> kan dælme ikke hitte ud af det i VB6 :-/
>
> --
> Mvh Bjørn
> Bil- og computernød
>
>
Hej Bjørn

Nyt at se dig i den her gruppe - det plejer vist at være dk.fritid.bil at du
hærger.

Du skal i et modul tilføje dette:

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Derefter er det bare at Sleep(1000) = stopper i 1000 ms

Jan



Bjørn (05-03-2002)
Kommentar
Fra : Bjørn


Dato : 05-03-02 13:44


"Jan V." <jv@miljodata.dk> wrote in message
news:3c84b6bb$0$41154$edfadb0f@dspool01.news.tele.dk...
>
> "Bjørn" <b.norgaaard@wanadoo.dk> skrev i en meddelelse
> news:a62bqr$1ct$1@sunsite.dk...
> > Hvad dævlen hedder den funktion i VB6...
> >
> > I C++ hedder den Sleep(x) hvor x er i ms.
> > Har set flere basic varianter hvor enten delay eller wait virker... Men
> jeg
> > kan dælme ikke hitte ud af det i VB6 :-/
> >
> > --
> > Mvh Bjørn
> > Bil- og computernød
> >
> >
> Hej Bjørn
>
> Nyt at se dig i den her gruppe - det plejer vist at være dk.fritid.bil at
du
> hærger.

Hærger og hærger... Det er nogle sjove gutter der hænger ud derinde. Er i
det sidste gået i passiven derinde da bilen efterhånden bare bliver smidt på
et værksted når der er noget galt... Har ikke helt tiden til det længere,
desværre (altså at rode med bilen selv)

> Du skal i et modul tilføje dette:
>
> Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>
> Derefter er det bare at Sleep(1000) = stopper i 1000 ms

Det spiller max

--
Mvh Bjørn
Bil- og computernød



Tomas Christiansen (05-03-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 05-03-02 23:03

Bjørn skrev:
> > Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As
Long)
> >
> > Derefter er det bare at Sleep(1000) = stopper i 1000 ms

> Det spiller max

Husk blot at når dit program "sover" med Sleep, så er det IKKE til at
vække før sleep-perioden er udløbet!
Med andre ord reagerer dit program på INTET (museklik, event, ...) i
den tid.

Længere pauser (over 1 sekund) kan f.eks. foretages med en løkke
indholdende en sleep med en passende tid (f.eks. 100 ms), som kører
indtil vente-tiden er overstået. Derved vil dit program reagere på
"ydre stimuli" selvom det "venter".

-------
Tomas


Jens Vestergaard (06-03-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 06-03-02 08:42

"Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
news:a63fb5$mna$1@news.cybercity.dk...
> Bjørn skrev:
> > Det spiller max
>
> Husk blot at når dit program "sover" med Sleep, så er det IKKE til at
> vække før sleep-perioden er udløbet!
> Med andre ord reagerer dit program på INTET (museklik, event, ...) i
> den tid.
>
> Længere pauser (over 1 sekund) kan f.eks. foretages med en løkke
> indholdende en sleep med en passende tid (f.eks. 100 ms), som kører
> indtil vente-tiden er overstået. Derved vil dit program reagere på
> "ydre stimuli" selvom det "venter".

Helt enig. Ved lange pauser, hvor præcisionen ikke er *så* væsentlig, plejer
jeg at bruge en Sub noget i retning af:

Public Sub Pause(sVent As Single)
Dim sPauseStart as Single
sPauseStart = Timer
Do Until Timer > sPauseStart + sVent
DoEvents
Loop
End Sub

Man skal bare tænke grundigt over, hvad der kan ske, mens løkken kører.
DoEvents kan godt være lidt 'farlig', men den tillader f.eks. at klik på an
Annuller-knap registreres.

--
mvh
Jens Vestergaard
www.railsoft.dk



Tomas Christiansen (06-03-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 06-03-02 22:35

Jens Vestergaard skrev:
> Helt enig. Ved lange pauser, hvor præcisionen ikke er *så*
væsentlig, plejer
> jeg at bruge en Sub noget i retning af:
>
> Public Sub Pause(sVent As Single)
> Dim sPauseStart as Single
> sPauseStart = Timer
> Do Until Timer > sPauseStart + sVent
> DoEvents
> Loop
> End Sub

Ja, men problemet med denne løkke er, at den kan tage ganske meget
CPU-tid!
Du spørger måske 10000 gange i sekundet om der skulle være gået et
sekund, hvilket jo egentlig er ganske unødvendigt.
Desuden vil det gå galt, hvis du forsøger at vente fra kl. lidt i 12
midnat til kl. lidt over 12 midnat.

Hvis du i stedet indsætter en 'Sleep' vil du minimere CPU-problemet
gevaldigt. Desuden kan du undgå en masse unødvendig floatng-point
aritmetmetik, samt undgå problemer med dato-skift midt i
venteperioden.

Sub Pause(ByVal lSekunder As Long)
Dim dNuErDetTid As Date
dNuErDetTid = DateAdd("s", lSekunder, Now)
Do Until Now >= dNuErDetTid
Sleep 100
DoEvents
Loop
End Sub

> Man skal bare tænke grundigt over, hvad der kan ske, mens løkken
kører.
> DoEvents kan godt være lidt 'farlig', men den tillader f.eks. at
klik på an
> Annuller-knap registreres.

Det er nemlig helt rigtigt.
Den serialisering af event-procedurer, som man ellers får "forærende"
af VB's runtime miljø, kan gå helt i smadder ved brugen af DoEvents.
Det kan både være rart og godt, men det kan også være noget skidt og
kanel.

F.eks. kunne man i Pause proceduren udvide løkkens betingelse til:

Do Until Now >= dNuErDetTid Or g_bTerminateNow

Hvor man så i f.eks. i en click-event-procedure for en cancel-knap kan
sætte g_bTerminateNow=True.
(Bemærk at jeg i navngivningen antyder at g_bTerminateNow er en global
(g), booelsk (b) variabel.)

-------
Tomas


Jens Vestergaard (07-03-2002)
Kommentar
Fra : Jens Vestergaard


Dato : 07-03-02 09:03

"Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
news:a6622r$1h18$1@news.cybercity.dk...
> Jens Vestergaard skrev:
> > Helt enig. Ved lange pauser, hvor præcisionen ikke er *så*
> væsentlig, plejer
> > jeg at bruge en Sub noget i retning af:
> >
[SNIP kode]

> Ja, men problemet med denne løkke er, at den kan tage ganske meget
> CPU-tid!
> Du spørger måske 10000 gange i sekundet om der skulle være gået et
> sekund, hvilket jo egentlig er ganske unødvendigt.

Du har ret. 'Problemet' er, at jeg har været så privelegeret, at mine apps
(hvori disse funktioner har været) har kørt på dedikerede maskiner, hvor jeg
var alene om at definere, hvad der skulle ske. Og hvornår.

Men det er en luksus - så dine bemærkninger er helt på deres plads

--
mvh
Jens Vestergaard
www.railsoft.dk



Tomas Christiansen (07-03-2002)
Kommentar
Fra : Tomas Christiansen


Dato : 07-03-02 10:49

Jens Vestergaard skrev:
> Du har ret. 'Problemet' er, at jeg har været så privelegeret, at mine apps
> (hvori disse funktioner har været) har kørt på dedikerede maskiner, hvor jeg
> var alene om at definere, hvad der skulle ske. Og hvornår.
>
> Men det er en luksus - så dine bemærkninger er helt på deres plads

Det er altid rart, når der er enighed om tingene.

Jeg har arbejdet i 10 år på mainframe - en del af årene som systemprogrammør/systemadministrator - så det "ligger i blodet" hos mig
at tænke på den slags...

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste