Gå til innhold

Timer eller loop eller begge?


Anbefalte innlegg

Hallo

 

Jeg driver å lager et lite program (i vb6) til et online spill, der jeg skal sende dvs pakker til serveren.

 

Det jeg sliter med er når jeg vil at en pakke skal sendes fort etter hverandre.

 

Det jeg har er dette

Private Sub Command3_Click()
Form1.sckserver.SendData SendData.Text
End Sub

Det jeg vil er at den skal sendes evig, kanskje jeg må ha en liten timer, men vist jeg holder enter nede å sender alt sammen er den perfekte hastighet, men vil at det skal skje av seg selv.

 

Har prøvd med Do først og Loop etter men da svarte ikke programmet :p

 

MVH

qaaq

Lenke til kommentar
Videoannonse
Annonse

Har ikke programmert i VB på lenge, men det beste tror jeg er å lytte på en forandring i det du skal sende og sende dataene hver gang en forandring har oppstått. Dersom du vil ha kontinuerlig sending kan du vel lage en ny tråd der du kjører en fast loop som sender dataene og inneholder en sleep/wait i f.eks. 10 millisekunder.. Vil ikke det gå?

Lenke til kommentar

Det beste blir nok å benytte en løkke (VB6 har ingen innebygget støtte for flertrådet programmering). Til denne type løkke må en ved regelrett intervall kalle prosedyren DoEvents for å unngå at programmet låser seg. Det er også en fordel at du legger ved API-kallet Sleep slik at ikke alle prosessorressursene brukes opp:

' Låser tråden i et visst antall millisekunder

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

 

' Denne variabelen gjør det mulig å avslutte spillløkken

Public Running As Boolean

 

' Lagrer sist gang vi kjørte oppdateringsprosedyren

Private LastUpdate As Single

 

' Antall sekunder vi venter mellom hvert kall

Const TimeToWait As Single = 0.5

 

Public Sub UpdateClients()

 

    ' Dersom informasjonen du sender er brukerstyrt, bør du kanskje vurdere

    ' å sende oppdateringskommandoen ved SendData_Change istedenfor en

    ' kontinuerlig strøm. I verste fall kan du jo simpelthen lagre den sist

    ' sendte verdien i en variabel og sende en oppdatering dersom det viser seg

    ' at tekstboksens verdi har forandret seg. Husk for øvrig at tekstbokser ikke

    ' bør brukes til annet enn brukerinntasting. Ikke bruk den som en variabel.

    Form1.sckserver.SendData SendData.Text

   

End Sub

 

Public Sub GameLoop()

 

    ' Initialiser verdier

    Running = True

    LastUpdate = Timer

 

    ' Kjør løkken inntil variabelen er satt til False

    Do While Running

   

        ' Vent inntil intervallet har forløpt

        If Timer >= LastUpdate + TimeToWait Then

            UpdateClients

            LastUpdate = Timer

        End If

       

        Sleep 10 ' Forhindrer overdrevent prosessorforbruk

        DoEvents ' Unngår låsning av programmet

    Loop

 

End Sub

 

Private Sub Form_Load()

 

    ' Da formen ved dette tidspunktet ikke har formen vist seg,

    ' må vi gjøre dette manuelt.

    Show

 

    ' Start løkken ved oppstart

    GameLoop

 

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

 

    ' Det er en fordel å avslutte løkken når formen lukkes

    ' - ellers avsluttes ikke programmet.

    Running = False

 

End Sub

Endret av aadnk
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...