Seite 2 von 2
Verfasst: 30.06.2006 21:56
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
Verfasst: 30.06.2006 22:51
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]
Verfasst: 01.07.2006 09:06
von onny
nice, vielen dank für die posts!
Verfasst: 01.07.2006 09:31
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

btw: diese "Ereignisse" sind selbstgemachte, und nicht zu verwechseln mit Window-Events.
Verfasst: 01.07.2006 09:48
von #NULL
remi meier hat auf seiner page auch ein paar kleine pb-tutorials zur zeitsteuerung
http://mypage.bluewin.ch/remimeier/
Verfasst: 01.07.2006 10:42
von onny
wow, ihr seid echt klasse, vielen dank!