Delay()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

sry hatte was vergessen ^^, natürlich mus Time laufen ^^

Code: Alles auswählen

Repeat 
 Delay(1) 
 Time = Time + 1
  StartDrawing(ScreenOutput()) 
    If Time < 20000 : 
     Locate(0,0) 
     DrawText("TEST") 
    EndIf 
    If Time >= 20000 : 
     Locate(0,15) 
     DrawText("Funzt nich so ganz") 
    EndIf 
  StopDrawing() 
ForEver
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

@<MeuchleR.>

Dachtest Du an sowas?

Code: Alles auswählen

aktion.l
zeit.l =0
warte.l = 20000
ende.b = 0

Procedure.b machwas()
Debug "machwas"
Shared ende
ende = 1
EndProcedure

Procedure machwasanderes()
Debug "machwasanderes"
EndProcedure

Repeat

  If zeit = 0
     zeit = ElapsedMilliseconds()
  EndIf

  aktion = zeit + warte 

  If aktion > ElapsedMilliseconds()
    machwasanderes()
  Else
    machwas()
  EndIf
  Delay(1000);nur erstmal zum testen
Until ende = 1
Oder prüfe mal, ob es nicht ein anderes Indiz als Zeit gibt.

grüsse an alle
mardanny71[/code]
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

nice, vielen dank für die posts!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

onny hat geschrieben:hm... versteh ich nich so ganz 0.o
glaub ich werd mich lieber mal mit threads beschäftigen... hoffe da gibts ein paar gute beispiele ^^
thx für die lösungen!
threads sind viel komplexer, beiss dich erstmal durch die timer durch ;)

ein simpler timer:

Code: Alles auswählen

TimeStep.l = 50
Timer.l = Elapsedmilliseconds() + TimeStep
Zaehler.l = 0

Repeat

   If Timer <= Elapsedmilliseconds()
      Timer + TimeStep
      Zaehler +1
   EndIf

   Delay(0)  ; <- CPU-Schoner
Until Abbruchbedingung = #True
hier wird Zähler alle 50ms hochgezählt. das Delay(0) ist nur dazu da, um die CPU nicht auszulasten, es ist für den timer an sich nicht notwendig.
auch wenn das einzelne zählereignis mal ein paar millisekunden falsch liegen kann, dadurch, dass der timer um einen festen wert erhöht wird und nicht auf die aktuellen millisekunden gesetzt, wird im großen und ganzen eine relative geauigkeit erreicht. wenn z.b. das programm längere zeit in einer proc festhängt, holt die schleife alle versäumten steps nach.

Diesen Zähler kann man jetzt unter anderem für eine art ereignistabelle nutzen:

Code: Alles auswählen

LetztEreignis.l = 4

Dim EreignisTime.l(LetztEreignis)
Dim EreignisText.s(LetztEreignis)

EreignisTime(0) =  50 : EreignisText(0) = "Los geht's"
EreignisTime(1) = 100 : EreignisText(1) = "Dann rödel ich mal"
EreignisTime(2) = 250 : EreignisText(2) = "Ha, die Mitte"
EreignisTime(3) = 500 : EreignisText(3) = "Fast fertig"
EreignisTime(4) = 550 : EreignisText(4) = "Das war's"

Ereignisnummer.l = 0
Zaehler.l = 0

TimeStep.l = 50
Timer.l = Elapsedmilliseconds() + TimeStep

Repeat

   ; der Timer wie gehabt
   If Timer <= Elapsedmilliseconds()
      Timer + TimeStep
      Zaehler +1
   EndIf

   ;die Ereignissteuerung
   If Zaehler = EreignisTime(Ereignisnummer)
      Debug EreignisText(Ereignisnummer)
      Ereignisnummer +1
      If Ereignisnummer > LetztEreignis
         Abbruchbedingung = #True
      EndIf
   EndIf

   Delay(0)  ; <- CPU-Schoner
Until Abbruchbedingung = #True
voila :D
btw: diese "Ereignisse" sind selbstgemachte, und nicht zu verwechseln mit Window-Events.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

remi meier hat auf seiner page auch ein paar kleine pb-tutorials zur zeitsteuerung
http://mypage.bluewin.ch/remimeier/
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

wow, ihr seid echt klasse, vielen dank!
Antworten