Gå til innhold

Sleep uten å fryse hele programmet


Anbefalte innlegg

Jeg har et program med flere former.

I den ene formen er det en klokke, som bruker "sleep 1000" for å lage et-sekunds-intevallene mellom skiftet på sekundviseren.

 

do while nestsek<30
nestsek = nestsek+1
doevents
sleep 1000
loop

 

Problemet med dette er at da fryser resten av formene også, så brukeren opplever det som om prorgammet hakker. Hvilken kode bruker jeg for å få et ett-sekunds-intevall uten å fryse hele greia?

Endret av Degeim
Lenke til kommentar
Videoannonse
Annonse

Du kan benytte følgende kode istedenfor:

 

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

Public Sub Wait(ByVal lngMilliseconds As Double)

   Dim dblStartTime As Double
   
   ' Lagre oppstartstid av prosedyren, slik at vi ikke venter mer en spesifisert
   dblStartTime = Timer

   ' Fortsett løkken inntil vi har ventet ferdig
   Do Until Timer - (lngMilliseconds / 1000) >= dblStartTime
   
       ' Motta meldinger fra Windows og andre programmer, derav muliggjør kjøring av andre hendelser
       DoEvents
       
       ' Vent 10 millisekunder
       Sleep 10
       
   Loop

End Sub

 

Koden kjører DoEvents og Sleep etter hverandre inntil det spesifiserte tidsintervallet har forløpt. Du kaller Wait-funksjonen akkurat som Sleep:

 

Wait 1000 ' Venter i tusen millisekunder

Lenke til kommentar

Det stemmer. Du behøver egentlig ikke benytte Sleep i løkken, hvilket i bunn og grunn var den eneste forskjellen mellom mitt forslag og hva du kom frem til. Vær dog oppmerksom på at du helst ikke bør vente i lange stunder med løsningen din - den opptar nemlig hele 100% av CPU'en.

 

Kanskje kunne du også anvendt en timer?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...