Wiederholen eines befehls

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Samq

Betreff: Wiederholen eines befehls

BeitragMi, Dez 12, 2007 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ich möchte einen befehl aller 15 sekunden ausführen, eine schleife kann ich zwar erstellen aber da wird das programm zu langsam.

wie mach ich das am besten?

REPEAT
frameTimer=CREATETIMER(15)
WAITTIMER (frameTimer)
Notify "dieser befhel soll aller 15 sekendungen aufgerufen werden"
FOREVER

SpionAtom

BeitragMi, Dez 12, 2007 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

   z = 1000 ;Dauer in Millisekunden
   
   Repeat
      If sz + z < MilliSecs()
         sz = MilliSecs()
         Print "Aufruf..."
      End If
   Until KeyDown(1)
   End
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Samq

BeitragMi, Dez 12, 2007 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
danke

The_Nici

BeitragMi, Dez 12, 2007 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einer Variable weniger:
Code: [AUSKLAPPEN]

While not Keydown(1)
   If Millisecs()-zeit>=1000 then
      Print "Eine Sekunde vergangen. :O"
      zeit=Millisecs()
   EndIf
Wend
 

phil217

BeitragMi, Dez 12, 2007 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
oder wenn du das ganze etwas performancesparender willst:
Code: [AUSKLAPPEN]

timer = CreateTimer(1)
Repeat
   WaitTimer(timer)
   counter = counter + 1
   If counter = 15
      ;dein befehl
      Print "test"
      counter = 0
   EndIf
Until KeyHit(1)
End

The_Nici

BeitragMi, Dez 12, 2007 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Phil, dein Vorschlag ist Müll, es ist nichts anderes als Samq selber dachte. Nur blöder.

Hip Teen

BeitragMi, Dez 12, 2007 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab zwar grad kein Basic da zum ausprobieren, aber geht ein
Code: [AUSKLAPPEN]
timer = CreateTimer( 1/15 )

nicht zum erstellen eines Timers, der alle 15 Sekunden einen Tick gibt?
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

the FR3AK

BeitragMi, Dez 12, 2007 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
So wird doch das ganze Programm verlangsamt oder?
 

phil217

BeitragMi, Dez 12, 2007 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
createtimer(1/15) gibt bei mir ein "Integer divide by zero"
und mein Vorschlag war nicht blöder, weil er immerhin tatsächlich alle 15 Sekunden was ausführt und nicht 15 mal in der Sekunde wie die Idee von Samq.
Allerdings hast du recht, Nici, dass der restliche Programmablauf durch den Timer gestört wird.

Hip Teen

BeitragMi, Dez 12, 2007 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
createtimer(1/15) gibt bei mir ein "Integer divide by zero"

ah, du hast warscheinlich BB2D, oder? In B+ müsste es eigentlich gehen (jedenfalls hab ich so schon programmiert)
Zitat:
und mein Vorschlag war nicht blöder

Naja, sagen wir so, er ist etwas unelegant
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

phil217

BeitragMi, Dez 12, 2007 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hip Teen hat Folgendes geschrieben:
ah, du hast warscheinlich BB2D, oder?

BB3D, kA wies mit B+ ausschaut
und wieso unelegant... nachdem normalerweise sowieso ein timer in die hauptschleife gehört(frames regulieren und so...) kann man den ja wohl gleich benutzen um so was wie 15 sekunden abzuwarten...
man muss halt den timer dementsprechend regulieren dass er das programm nich unnötig ausbremst
aber immerhin hat meine lösung nich 50% prozessorauslastung wie die andere...

The_Nici

BeitragMi, Dez 12, 2007 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
phil, bei einem Spiel ist das ungünstig, keiner will mit einem FPS spielen wegen einer Zeitabfrage.
Dazu kann man die Prozessorauslastung auch mit einem anderen Timer runterdrücken.

Fang nich' gleich an zu weinen.

Hip Teen

BeitragMi, Dez 12, 2007 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
phil, warum unelegant? Weil du mehr machst zur problemlösung, als notwendig wäre. Das ist in meinen Augen eine sehr nahekommende Definition für unelegant (in der Programmierung, bei Menschen ist das anders).
Zitat:
nachdem normalerweise sowieso ein timer in die hauptschleife gehört(frames regulieren und so...) kann man den ja wohl gleich benutzen um so was wie 15 sekunden abzuwarten...

Zitat:
aber immerhin hat meine lösung nich 50% prozessorauslastung wie die andere...

Wenn du sowieso von nem ganzen Programm ausgehst, wird der Timerteil keine 50% Auslastung in Anspruch nehmen
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Dreamora

BeitragMi, Dez 12, 2007 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs mit ql:CreateTimer(1) und If ql:TimerTicks(timer) mod 15 = 0 then executeBlabla

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group