Procedure in bestimmten Zeitintervallen ausführen?
Procedure in bestimmten Zeitintervallen ausführen?
Tach Leute.
Jemand von euch eine Idee, wie ich eine Prozedure in vorher bestimmten
Zeitintervallen ausführen kann?
Z.B.: Alle 10 Minuten soll ´Prozedure XYZ´ irgendwas machen.
Teste gerade so einiges aus, komme aber nicht zu einem sauberen Ergebnis.
Gruß
Thomas
Jemand von euch eine Idee, wie ich eine Prozedure in vorher bestimmten
Zeitintervallen ausführen kann?
Z.B.: Alle 10 Minuten soll ´Prozedure XYZ´ irgendwas machen.
Teste gerade so einiges aus, komme aber nicht zu einem sauberen Ergebnis.
Gruß
Thomas
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
am einfachsten wäre es, in der hauptschleife, die ja normalerweise mehrmals pro sekunde ausgeführt wird,
die zeit zu überwachen und diese proc aufzurufen.
aber da du daran bestimmt schon gedacht hast, schildere dein problem bitte mal umfangreicher...
die zeit zu überwachen und diese proc aufzurufen.
aber da du daran bestimmt schon gedacht hast, schildere dein problem bitte mal umfangreicher...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Code: Alles auswählen
Global quit.l
Procedure xyz(hwnd.l,nIDEvent.l, uElapse.l, lpTimerFunc.l)
If MessageRequester("","5 Sekunden sind vergangen!"+Chr(10)+"Beenden?",#PB_MessageRequester_YesNo) = 6
quit = 1
EndIf
EndProcedure
OpenWindow(0,0,0,0,0,#PB_Window_Invisible,"")
settimer_(WindowID(),1,5000,@xyz()) ; alle 5000 millisekunden (5 sek.) xyz() ausführen
Repeat
WaitWindowEvent()
Until quit
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
Weshalb nicht einfach so:
Das kann man zur Not ja auch als zusätzlichen Thread starten. Damit wird die CPU eh besser ausgelastet...
PS: Sorry, wen mein Source Fehler enthalten sollte, aber ich habe grad kein PB zur Hand...
cya
Pascal
Code: Alles auswählen
Procedure SayHello(dummy.b)
MessageRequester("Mein Programm","Hallo!")
EndProcedure
Repeat
SayHello(0)
Delay(600000)
ForEver
PS: Sorry, wen mein Source Fehler enthalten sollte, aber ich habe grad kein PB zur Hand...
cya
Pascal
Code: Alles auswählen
Declare Thread(a.l)
Procedure InitTimer()
Structure Timer
Time.l
Adress.l
DelayTime.l
EndStructure
NewList Timer.Timer()
CreateThread(@Thread(),0)
EndProcedure
Procedure AddTimer(Adress.l,DelayTime.l)
AddElement(Timer())
Timer()\Adress = Adress
Timer()\DelayTime = DelayTime
Timer()\Time = GetTickCount_()
EndProcedure
Procedure Print1()
PrintN("[[Timer1]]")
EndProcedure
Procedure Print2()
PrintN("//Timer2\\")
EndProcedure
Procedure Print3()
PrintN("**Timer3**")
EndProcedure
Procedure Print4()
PrintN("##Timer4##")
EndProcedure
Procedure Thread(a.l)
Repeat
ForEach Timer()
If GetTickCount_() - Timer()\Time => Timer()\DelayTime
ConsoleColor(8,0)
PrintN("Time: "+Str(GetTickCount_()-Timer()\Time)+" ["+Str(Timer()\DelayTime)+"]")
ConsoleColor(9,0)
CallFunctionFast(Timer()\Adress)
Timer()\Time = GetTickCount_()
EndIf
Next
Delay(1)
ForEver
EndProcedure
InitTimer()
AddTimer(@Print1(),5200)
AddTimer(@Print2(),1500)
AddTimer(@Print3(),1700)
AddTimer(@Print4(),2300)
OpenConsole()
MessageRequester("","Press 2 exit!")
End
Oder:
auf http://www.purearea.net in den Userlibs nach den PureTools suchen. Da ist auch eine Timerfunktion integriert, die dann eine bestimmt Prozedur aufruft.
Morty
auf http://www.purearea.net in den Userlibs nach den PureTools suchen. Da ist auch eine Timerfunktion integriert, die dann eine bestimmt Prozedur aufruft.
Morty
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
also, wo wir schon bei code-vorschlägen sind...
in diesem beispiel wird die Proc alle 9 Minuten 24 Sekunden aufgerufen.
Code: Alles auswählen
RelMin = 9
RelSec = 24
...
Repeat ; Hauptschleife
...
If ElapsedMilliseconds() >= NextCallTime
NextCallTime = ElapsedMilliseconds()+1000*(60*RelMin+RelSec)
MyProcedure()
EndIf
...
Until WasAuchImmerDer Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.