Seite 1 von 2
Zeitsteuerung, aber wie?
Verfasst: 21.10.2007 13:09
von neuling
Hallo,
ich möchte dass eine Grafik für einen Kurzen Moment angezeigt und nach einer bestimmten Zeit (z.B 1500ms) wieder ausgeblendet wird ohne das mein Programm mit Delay oder wie auch immer Unterbrochen wird (denn wenn eine Grafik angezeigt wird, sollen noch aktionen möglich sein).
Hat da jemand eine Idee?
ps: nutze pb 4
Verfasst: 21.10.2007 13:27
von RSBasic
Mit ElapsedMilliseconds() kannst du die Zeit messen.
Beispiel:
Code: Alles auswählen
StartTime = ElapsedMilliseconds()
Repeat
Debug Str(ElapsedMilliseconds()-StartTime)+" ms"
Delay(100)
Until ElapsedMilliseconds()-StartTime>3000
MessageRequester("Timer","3 Sekunden sind abgelaufen",0)
Verfasst: 21.10.2007 13:29
von Vermilion
Im Code Archiv befindet sich auch ein Beispiel zum CPU unabhängigen Programmieren. Also, dass egal wie oft die Schleife durchlaufen wird, "Ticks" in festen Intervallen "gegeben" werden.
Verfasst: 21.10.2007 13:47
von X0r
Verfasst: 21.10.2007 15:07
von neuling
Hallo,
aha, danke!
Kann ich damit auch irgendwie eine art "Stopuhr" machen wo auch die Millisekunden ständig angezeigt werden? Also eine Art Display von 0 bis unendlich oder was passiert?
Verfasst: 21.10.2007 15:22
von RSBasic
Code: Alles auswählen
StartTime = ElapsedMilliseconds()
Repeat
Debug Str(ElapsedMilliseconds()-StartTime)+" ms"
Delay(10)
ForEver
Du kannst ja auch auf einem Fenster programmieren. Ist einfach

Verfasst: 21.10.2007 16:07
von neuling
Hallo,
ja danke!
Nur mal eine frage zwischendurch, hast du auch eine Prozessorauslastung von 100% wenn du in einer Schleife steckst?
Also auf meinem Laptop AMD 3000+ ~ 1,8 Ghz habe ich eine Auslstung von 100%, auf meinem Arbeitsrechner AMD X2 3800+ haben beide Kerne ca. 50% Auslastung was ja nicht gerade gut ist wenn ich bedenke das HalfLife2 meine Prozessor nicht einmal zu 20% auslastet.....
Verfasst: 21.10.2007 16:12
von RSBasic
@neuling
Ja das ist normal.
Du kannst es in einem Thread machen, dann hast du wieder 0 % CPU-Auslastung.
Beispiel:
Code: Alles auswählen
Procedure Uhr()
StartTime = ElapsedMilliseconds()
Repeat
Debug Str(ElapsedMilliseconds()-StartTime)+" ms"
Delay(10)
ForEver
EndProcedure
OpenConsole()
ConsoleTitle("Uhr")
CreateThread(@Uhr(),154)
Input()
CloseConsole()
Oder:
Code: Alles auswählen
Procedure Uhr()
StartTime = ElapsedMilliseconds()
Repeat
ClearConsole()
PrintN(Str(ElapsedMilliseconds()-StartTime)+" ms")
Delay(10)
ForEver
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Uhr")
CreateThread(@Uhr(),154)
Input()
CloseConsole()
Verfasst: 21.10.2007 16:36
von neuling
Hi,
ich meine nicht bei dem ding mit den ms sondern im Allgemeinen, es gibt eigentlich immer nur (wie früher auch bei Qbasic) immer eine Hauptschleife die etwas macht, die lastet die CPU doch voll aus.. oder sehe ich da was falsch?
Und bei dieser Threaderstellung kann ich nur ein Wert mitgeben aber nicht abgrasen oder?
Ich glaube ich checke dass nicht so mit den Proceduren-kramm, ich kenne nur Subs/Function´s...
Kannst mich mal kurz aufklären?
Verfasst: 21.10.2007 16:39
von RSBasic
@neuling
Wenn du Delay() benutzt, dann nicht.
Du kannst jederzeit den Wert des Delay() ändern bzw. erhöhen.
Also wenn du Delay() benutzt, dann wird deine CPU nicht ausgelastet.
Da die Schleife immer eine kleine Pause ablegen muss, bevor sie wieder durchläuft.
Das trift nur zu, wenn du in einem Thread oder in einer Event-Schleife reinmachst.
\\Edit:
@Threadfrage
Das ist richtig, du kannst nur ein Parameter übergeben.
Aber es gibt Alternativen.
Du kannst z.B. mehrere Variablen in einem Parameter übergeben.
Du musst nur mit einem Zeichen (z.B. "|") die Variablen trennen.
Dann zerlegst du im Thread den Parameter wieder.
Und dann hast du wieder deine Parameter.
\\Edit2:
Beispiel:
Code: Alles auswählen
VariableA=1024
VariableB=8
VariableC=64
VariablePack$=Str(VariableA)+"|"+Str(VariableB)+"|"+Str(VariableC)
Debug VariablePack$