Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
			
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  04.10.2014 23:33 
			
			
			
			
			Hi , hier eine einfache Include für einen Timer , kann gerne erweitert werden 
 hat so für meine Zwecke genügt.
version: 1
Platforms: Alle
PB getestet: 5.11
Funktionen:
ADD_TIMER
DELETE_TIMER
TIMER_EXIST
CHECK_TIMER
beispiel: 
Code: Alles auswählen 
#Timer1 = 0
#WaitTime = 5000
IncludeFile("timerinclude.pbi")
;// Existiert Timer ?
If TIMER_EXIST(#Timer1) = 0
   ;// hinzufügen
  ADD_TIMER(ElapsedMilliseconds(),#WaitTime,#Timer1)
  
ElseIf CHECK_TIMER(#Timer1)
   ;// timer abgelaufen , löschen 
  DELETE_TIMER(#Timer1)    
  
  Debug "timer ausgeführt"
EndIf
include: :
Code: Alles auswählen 
;****************************************************************************************************** 
;- ***  Include Timer  *** 
;****************************************************************************************************** 
;// Include Timer 
;// Johannes Meyer 
;// version 1
;// PB 5.11
;// 4.10.2014
;// forum http://www.purebasic.fr/german/viewtopic.php?f=8&t=28436
;****************************************************************************************************** 
;- ***  *** 
;****************************************************************************************************** 
Structure Struct_Timer
  StartTime.i
  Time.i
  TimerID.i
  TimeToCheck.i
EndStructure
Global NewList Timer.Struct_Timer()
Procedure ADD_TIMER(StartTime.i,TimeToCheck.i,TimerID.i = #PB_Any)
  AddElement(Timer())
  
  If TimerID = #PB_Any
  	TimerID = @Timer()
  EndIf
  
  With Timer()    
    \StartTime.i    = StartTime.i
    \TimeToCheck.i  = TimeToCheck.i
    \TimerID.i      = TimerID.i
  EndWith      
  ProcedureReturn TimerID 
  
EndProcedure
Procedure DELETE_TIMER(TimerID.i)
  
    ForEach Timer()   
      With Timer()      
        If \TimerID = TimerID   
          DeleteElement(Timer())
          ProcedureReturn #True          
        EndIf                
      EndWith    
    Next
    ProcedureReturn #False
    
EndProcedure  
Procedure TIMER_EXIST(TimerID.i)
  
   ForEach Timer()   
      With Timer()      
        If \TimerID = TimerID        
          ProcedureReturn #True
        EndIf                
      EndWith    
    Next
    
    ProcedureReturn #False    
  EndProcedure
   
Procedure CHECK_TIMER(TimerID.i)    
  Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
     
If \TimerID = TimerID
  If TimeNow - \StartTime >= \TimeToCheck.i
    ProcedureReturn #True
  EndIf
EndIf
      
    EndWith  
  Next  
  
ProcedureReturn #False  
EndProcedure
					Zuletzt geändert von 
True29  am 06.10.2014 20:14, insgesamt 1-mal geändert.
									
i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
				
			
		
		
			
				
								Sicro 							 
									
		Beiträge:  968 Registriert:  11.08.2005 19:08
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von Sicro  05.10.2014 16:31 
			
			
			
			
			Code: Alles auswählen 
If TimeNow - \StartTime >= \TimeToCheck.i
  If \TimerID = TimerID
    ProcedureReturn #True
  EndIf
EndIfwürde ich ändern zu
Code: Alles auswählen 
If \TimerID = TimerID
  If TimeNow - \StartTime >= \TimeToCheck.i
    ProcedureReturn #True
  EndIf
EndIfIf TimeNow - \StartTime >= \TimeToCheck.i 
ist sicherlich langsamer als
If \TimerID = TimerID 
deshalb sollte lieber das schnellere öfters geprüft werden.
 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  06.10.2014 20:13 
			
			
			
			
			danke für den verbesserungsvorschlag setze ich dann auch so gerne um.
			
			
									
									i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  24.05.2015 17:22 
			
			
			
			
			kleines update auf 1.1 
- DEBUG_TIMER() ; debug  
- CONV_TIME_TO_() ;convertieren der zeit in sec, min
- GET_TIMER_TIME_PAST() ;vergangene zeit
- GET_TIMER_TIME() ;übgrige zeit
- UPDATE_TIMER() ; setzt zeit neu
kleines beispiel.
Code: Alles auswählen 
#Timer2_SystemWait = 1
ADD_TIMER(ElapsedMilliseconds(),1000,#Timer2_SystemWait)  
DEBUG_TIMER()
debug GET_TIMER_TIME_PAST(#Timer2_SystemWait)
;//so hatte ich es eingesetzt.
debug LSet("",GET_TIMER_TIME_PAST(#Timer2_SystemWait)/100,".")  + CONV_TIME_TO_(GET_TIMER_TIME(#Timer2_SystemWait)
Code: Alles auswählen 
;******************************************************************************************************
;- ***  Include Timer  ***
;******************************************************************************************************
;// Include Timer
;// Johannes Meyer
;// version 1.1
;// PB 5.11
;// 24.5.2015
;// forum http://www.purebasic.fr/german/viewtopic.php?f=8&t=28436
;******************************************************************************************************
;- ***  ***
;******************************************************************************************************
Structure Struct_Timer
  StartTime.i
  Time.i
  TimerID.i
  TimeToCheck.i
EndStructure
Enumeration
  #TIME_NONE
  #TIMER_SEC
  #TIMER_MIN
  #TIMER_HOURS
  #TIMER_DAY
EndEnumeration
Global NewList Timer.Struct_Timer()
Global TimerIncludeDebug.i = #False
Procedure DEBUG_TIMER(IncludeDebug = #True)
  TimerIncludeDebug = IncludeDebug
EndProcedure
Procedure UPDATE_TIMER(TimerID.i,Time.i,StartTime.i = #PB_Ignore)
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                    
        If StartTime <> #PB_Ignore
          \StartTime = StartTime
        EndIf  
        \TimeToCheck = Time
        If TimerIncludeDebug
          Debug "Timer Update ID "+ TimerID +" OK"
        EndIf
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure CONV_TIME_TO_(time.i,Einheit.i = #TIMER_SEC)  
  Select Einheit    
    Case #TIMER_SEC
      ProcedureReturn Int(time/1000) % 60      
    Case #TIMER_MIN
      ProcedureReturn Int(time/60000) % 60      
    Case #TIMER_HOURS
      ProcedureReturn Int(time/3600000) % 24      
    Case #TIMER_DAY  
  EndSelect
        
EndProcedure
Procedure GET_TIMER_TIME_PAST(TimerID)
Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        If TimerIncludeDebug
          Debug "Timer PAST "+TimerID+" OK"
        EndIf
        ProcedureReturn (TimeNow - \StartTime)        
      EndIf                     
    EndWith  
  Next 
  
EndProcedure
Procedure GET_TIMER_TIME(TimerID.i)
Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        If TimerIncludeDebug
          Debug "Timer Time "+TimerID+" OK"
        EndIf
        ProcedureReturn \TimeToCheck - (TimeNow - \StartTime)
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure ADD_TIMER(StartTime.i,TimeToCheck.i,TimerID.i = #PB_Any)
  AddElement(Timer())
  
 
  If TimerID = #PB_Any
     TimerID = @Timer()
  EndIf
 
  With Timer()   
    \StartTime.i    = StartTime.i
    \TimeToCheck.i  = TimeToCheck.i
    \TimerID.i      = TimerID.i
  EndWith     
  If TimerIncludeDebug
    Debug "Timer ADD "+TimerID+" OK"
  EndIf
        
  ProcedureReturn TimerID
 
EndProcedure
Procedure DELETE_TIMER(TimerID.i)
 
    ForEach Timer()   
      With Timer()     
        If \TimerID = TimerID   
          DeleteElement(Timer())
          If TimerIncludeDebug
            Debug "Timer DELETE "+TimerID+" OK"
          EndIf
          ProcedureReturn #True         
        EndIf               
      EndWith   
    Next
    ProcedureReturn #False
   
EndProcedure 
Procedure TIMER_EXIST(TimerID.i)
 
   ForEach Timer()   
      With Timer()     
        If \TimerID = TimerID       
          If TimerIncludeDebug
            Debug "Timer EXIST "+TimerID+" OK"
          EndIf
          ProcedureReturn #True
        EndIf               
      EndWith   
    Next
   
ProcedureReturn #False   
EndProcedure
  
  
   
  Procedure CHECK_TIMER(TimerID.i)   
    Protected TimeNow.i = ElapsedMilliseconds() 
    
    ForEach Timer()   
      With Timer()
        \Time = \TimeToCheck - (TimeNow - \StartTime)
        
        If \TimerID = TimerID
          If TimeNow - \StartTime >= \TimeToCheck.i
            If TimerIncludeDebug
              Debug "Timer CHECK "+TimerID+" OK"
            EndIf
            ProcedureReturn #True
          EndIf
        EndIf
        
      EndWith 
    Next 
    
    ProcedureReturn #False 
  EndProcedure
i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								GPI 							 
									
		Beiträge:  1511 Registriert:  29.08.2004 13:18
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von GPI  15.11.2015 22:32 
			
			
			
			
			Sicro hat geschrieben: Code: Alles auswählen 
If TimeNow - \StartTime >= \TimeToCheck.i
  If \TimerID = TimerID
    ProcedureReturn #True
  EndIf
EndIfwürde ich ändern zu
Code: Alles auswählen 
If \TimerID = TimerID
  If TimeNow - \StartTime >= \TimeToCheck.i
    ProcedureReturn #True
  EndIf
EndIfIf TimeNow - \StartTime >= \TimeToCheck.i 
ist sicherlich langsamer als
If \TimerID = TimerID 
deshalb sollte lieber das schnellere öfters geprüft werden.
Kann man Übrigens zusammenfassen:
Code: Alles auswählen 
If \TimerID = TimerID AND TimeNow - \StartTime >= \TimeToCheck.i
  ProcedureReturn #True
EndIf
PB ist so schlau, das wenn die erste Hälfte des IF - And nicht erfüllt ist, die zweite gar nicht erst ausgeführt wird. Kann man auch für andere Sachen nutzen, bspw.:
Code: Alles auswählen 
If *function AND CallFunctionFast(*function)>10
  ;do something
EndIf
CallFunctionFast würde hier nur aufgerufen werden, den *function<>0 ist. 
So kann man sehr leicht verschachtelte IF-Endif vermeiden - die immer den Hang haben, unübersichtlich zu werden.
Das ganze ist übrigens in der Anleitung dokumentiert (zumindest die Englische) und damit sicher!
 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  01.01.2016 01:21 
			
			
			
			
			danke werd ich beachten 
i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  01.01.2016 03:36 
			
			
			
			
			kleines Update 
Code: Alles auswählen 
;******************************************************************************************************
;- ***  Include Timer  ***
;******************************************************************************************************
;// Include Timer
;// Johannes Meyer
;// version 1.2
;// PB 5.11
;// 1.1.2016
;// forum http://www.purebasic.fr/german/viewtopic.php?f=8&t=28436
;******************************************************************************************************
;- ***  ***
;******************************************************************************************************
Structure Struct_Timer
  StartTime.i
  Time.i
  TimerID.i
  TimeToCheck.i
EndStructure
Enumeration
  #TIME_NONE
  #TIMER_SEC
  #TIMER_MIN
  #TIMER_HOURS
  #TIMER_DAY
EndEnumeration
Global NewList Timer.Struct_Timer()
Global TimerIncludeDebug.i = #False
Procedure DEBUG_TIMER(IncludeDebug = #True)
  TimerIncludeDebug = IncludeDebug
EndProcedure
Procedure UPDATE_TIMER(TimerID.i,Time.i,StartTime.i = #PB_Ignore)
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                    
        If StartTime <> #PB_Ignore
          \StartTime = StartTime
        EndIf  
        \TimeToCheck = Time
        If TimerIncludeDebug
          Debug "Timer Update ID "+ TimerID +" OK"
        EndIf
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure CONV_TIME_TO_(time.i,Einheit.i = #TIMER_SEC)  
  Select Einheit    
    Case #TIMER_SEC
      ProcedureReturn Int(time/1000) % 60      
    Case #TIMER_MIN
      ProcedureReturn Int(time/60000) % 60      
    Case #TIMER_HOURS
      ProcedureReturn Int(time/3600000) % 24      
    Case #TIMER_DAY  
  EndSelect
  
EndProcedure
Procedure GET_TIMER_TIME_PAST(TimerID)
  Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        If TimerIncludeDebug
          Debug "Timer PAST "+TimerID+" OK"
        EndIf
        ProcedureReturn (TimeNow - \StartTime)        
      EndIf                     
    EndWith  
  Next 
  
EndProcedure
Procedure GET_TIMER_TIME(TimerID.i)
  Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        If TimerIncludeDebug
          Debug "Timer Time "+TimerID+" OK"
        EndIf
        ProcedureReturn \TimeToCheck - (TimeNow - \StartTime)
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure ADD_TIMER(StartTime.i,TimeToCheck.i,TimerID.i = #PB_Any)
  AddElement(Timer())
  
  
  If TimerID = #PB_Any
    TimerID = @Timer()
  EndIf
  
  With Timer()   
    \StartTime.i    = StartTime.i
    \TimeToCheck.i  = TimeToCheck.i
    \TimerID.i      = TimerID.i
  EndWith     
  If TimerIncludeDebug
    Debug "Timer ADD "+TimerID+" OK"
  EndIf
  
  ProcedureReturn TimerID
  
EndProcedure
Procedure DELETE_TIMER(TimerID.i)
  
  ForEach Timer()   
    With Timer()     
      If \TimerID = TimerID   
        DeleteElement(Timer())
        If TimerIncludeDebug
          Debug "Timer DELETE "+TimerID+" OK"
        EndIf
        ProcedureReturn #True         
      EndIf               
    EndWith   
  Next
  ProcedureReturn #False
  
EndProcedure 
Procedure TIMER_EXIST(TimerID.i)
  
  ForEach Timer()   
    With Timer()     
      If \TimerID = TimerID       
        If TimerIncludeDebug
          Debug "Timer EXIST "+TimerID+" OK"
        EndIf
        ProcedureReturn #True
      EndIf               
    EndWith   
  Next
  
  ProcedureReturn #False   
EndProcedure
Procedure CHECK_TIMER(TimerID.i)   
  Protected TimeNow.i = ElapsedMilliseconds() 
  
  ForEach Timer()   
    With Timer()
      \Time = \TimeToCheck - (TimeNow - \StartTime)      
      If \TimerID = TimerID And TimeNow - \StartTime >= \TimeToCheck.i        
          If TimerIncludeDebug
            Debug "Timer CHECK "+TimerID+" OK"
          EndIf
          ProcedureReturn #True        
      EndIf      
    EndWith 
  Next 
  
  ProcedureReturn #False 
EndProcedure
;// RETURN COUNT OF AKTIV TIMER
Procedure COUNT_TIMER()
  Protected Timer.i
  
  ForEach Timer()
    If CHECK_TIMER(Timer()\TimerID) = #True
      Timer + 1
    EndIf    
  Next   
  
  If TimerIncludeDebug
    Debug "Timer Count " + Str(Timer)
  EndIf
          
  ProcedureReturn Timer
EndProcedure
i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
	
						
		
		
			
				
								mk-soft 							 
									
		Beiträge:  3856 Registriert:  24.11.2004 13:12Wohnort:  Germany 
		
						
						
													
							
						
									
						Beitrag 
					 
								von mk-soft  01.01.2016 14:26 
			
			
			
			
			
Vielleicht noch "TimerIncludeDebug" zu konstante "#TimerIncludeDebug"
und zu "CompilerIf #TimerIncludeDebug" ändern.
Dann wird es nicht mit kompiliert 
 
		 
				
		
		 
	 
	
						
		
		
			
				
																			
								True29 							 
									
		Beiträge:  283 Registriert:  18.08.2012 19:18Computerausstattung:  Windows 8 64bit .Profan x2,Purebasic 5.5Wohnort:  Worms
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von True29  10.01.2016 17:51 
			
			
			
			
			neue version: 
changes: 
Code: Alles auswählen 
;******************************************************************************************************
;- ***  Include Timer  ***
;******************************************************************************************************
;// Include Timer Module
;// Johannes Meyer
;// version 1.3
;// PB 5.40
;// 1.1.2016
;// forum http://www.purebasic.fr/german/viewtopic.php?f=8&t=28436
;******************************************************************************************************
;- ***  ***
;******************************************************************************************************
DeclareModule Timer  
#TimerIncludeDebug = #False
  
Enumeration
  #TIME_NONE
  #TIMER_SEC
  #TIMER_MIN
  #TIMER_HOURS
  #TIMER_DAY
EndEnumeration
  
  Declare UPDATE_TIMER(TimerID.i,Time.i,StartTime.i = #PB_Ignore)
  Declare CONV_TIME_TO_(time.i,Einheit.i = #TIMER_SEC)
  Declare GET_TIMER_TIME_PAST(TimerID)
  Declare GET_TIMER_TIME(TimerID)
  Declare ADD_TIMER(StartTime.i,TimeToCheck.i,TimerID.i = #PB_Any)
  Declare DELETE_TIMER(TimerID)
  Declare TIMER_EXIST(TimerID)
  Declare CHECK_TIMER(TimerID)
  Declare COUNT_TIMER()
EndDeclareModule
Module Timer
 
Structure Struct_Timer
  StartTime.i
  Time.i
  TimerID.i
  TimeToCheck.i
EndStructure
Global NewList Timer.Struct_Timer()
Global TimerIncludeDebug.i = #False
Procedure UPDATE_TIMER(TimerID.i,Time.i,StartTime.i = #PB_Ignore)
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                    
        If StartTime <> #PB_Ignore
          \StartTime = StartTime
        EndIf  
        \TimeToCheck = Time
        
        CompilerIf #TimerIncludeDebug
          Debug "Timer Update ID "+ TimerID +" OK"
        CompilerEndIf
        
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure CONV_TIME_TO_(time.i,Einheit.i = #TIMER_SEC)  
  Select Einheit    
    Case #TIMER_SEC
      ProcedureReturn Int(time/1000) % 60      
    Case #TIMER_MIN
      ProcedureReturn Int(time/60000) % 60      
    Case #TIMER_HOURS
      ProcedureReturn Int(time/3600000) % 24      
    Case #TIMER_DAY  
  EndSelect
  
EndProcedure
Procedure GET_TIMER_TIME_PAST(TimerID)
  Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        CompilerIf #TimerIncludeDebug
          Debug "Timer PAST "+TimerID+" OK"
        CompilerEndIf
        ProcedureReturn (TimeNow - \StartTime)        
      EndIf                     
    EndWith  
  Next 
  
EndProcedure
Procedure GET_TIMER_TIME(TimerID.i)
  Protected TimeNow.i = ElapsedMilliseconds()  
  
  ForEach Timer()   
    With Timer()
      If TimerID = \TimerID                                
        CompilerIf #TimerIncludeDebug
          Debug "Timer Time "+TimerID+" OK"
        CompilerEndIf
        ProcedureReturn \TimeToCheck - (TimeNow - \StartTime)
      EndIf                     
    EndWith  
  Next  
EndProcedure
Procedure ADD_TIMER(StartTime.i,TimeToCheck.i,TimerID.i = #PB_Any)
  AddElement(Timer())
  
  
  If TimerID = #PB_Any
    TimerID = @Timer()
  EndIf
  
  With Timer()   
    \StartTime.i    = StartTime.i
    \TimeToCheck.i  = TimeToCheck.i
    \TimerID.i      = TimerID.i
  EndWith     
  CompilerIf #TimerIncludeDebug
    Debug "Timer ADD "+TimerID+" OK"
  CompilerEndIf
  
  ProcedureReturn TimerID
  
EndProcedure
Procedure DELETE_TIMER(TimerID.i)
  
  ForEach Timer()   
    With Timer()     
      If \TimerID = TimerID   
        DeleteElement(Timer())
        CompilerIf #TimerIncludeDebug
          Debug "Timer DELETE "+TimerID+" OK"
        CompilerEndIf
        ProcedureReturn #True         
      EndIf               
    EndWith   
  Next
  ProcedureReturn #False
  
EndProcedure 
Procedure TIMER_EXIST(TimerID.i)
  
  ForEach Timer()   
    With Timer()     
      If \TimerID = TimerID       
        CompilerIf #TimerIncludeDebug
          Debug "Timer EXIST "+TimerID+" OK"
        CompilerEndIf
        ProcedureReturn #True
      EndIf               
    EndWith   
  Next
  
  ProcedureReturn #False   
EndProcedure
Procedure CHECK_TIMER(TimerID.i)   
  Protected TimeNow.i = ElapsedMilliseconds() 
  
  ForEach Timer()   
    With Timer()
      \Time = \TimeToCheck - (TimeNow - \StartTime)      
      If \TimerID = TimerID And TimeNow - \StartTime >= \TimeToCheck.i        
          CompilerIf #TimerIncludeDebug
            Debug "Timer CHECK "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn #True        
      EndIf      
    EndWith 
  Next 
  
  ProcedureReturn #False 
EndProcedure
;// RETURN COUNT OF AKTIV TIMER
Procedure COUNT_TIMER()
  Protected Timer.i
  
  ForEach Timer()
    If CHECK_TIMER(Timer()\TimerID) = #True
      Timer + 1
    EndIf    
  Next   
  
  CompilerIf #TimerIncludeDebug
    Debug "Timer Count " + Str(Timer)
  CompilerEndIf
          
  ProcedureReturn Timer
EndProcedure
EndModule
Beispiel 
Code: Alles auswählen 
#Timer1 = 0
#WaitTime = 5000
IncludeFile("timerinclude.pbi")
;// Existiert Timer ?
If Timer::TIMER_EXIST(#Timer1) = 0
   ;// hinzufügen
  Timer::ADD_TIMER(ElapsedMilliseconds(),#WaitTime,#Timer1) 
ElseIf Timer::CHECK_TIMER(#Timer1)
   ;// timer abgelaufen , löschen
  Timer::DELETE_TIMER(#Timer1)   
 
  Debug "timer ausgeführt"
EndIf
i7,12gb ram , Windows 10 ,Purebasic 5.50 
						 
		 
				
		
		 
	 
	
						
		
		
			
				
								Sicro 							 
									
		Beiträge:  968 Registriert:  11.08.2005 19:08
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von Sicro  05.05.2016 20:35 
			
			
			
			
			Der Code im 
CodeArchiv  unter Time_and_Date/SimpleTimer.pbi wird durch diese verbesserte Version ersetzt:
Code: Alles auswählen 
EnableExplicit
DeclareModule Timer
  EnableExplicit
  
  #TimerIncludeDebug = #False
  
  Enumeration
    #TIMER_SEC
    #TIMER_MIN
    #TIMER_HOUR
    #TIMER_DAY
  EndEnumeration
  
  Declare.i UPDATE_TIMER(TimerID.i, Time.i, StartTime.i = #PB_Ignore)
  Declare.i CONV_TIME_TO_(Time.i, Type.i = #TIMER_SEC)
  Declare.i GET_TIMER_TIME_PAST(TimerID.i)
  Declare.i GET_TIMER_TIME(TimerID.i)
  Declare.i ADD_TIMER(StartTime.i, TimeToCheck.i, TimerID.i = #PB_Any)
  Declare.i DELETE_TIMER(TimerID.i)
  Declare.i TIMER_EXIST(TimerID.i)
  Declare.i CHECK_TIMER(TimerID.i)
  Declare.i COUNT_TIMER()
EndDeclareModule
Module Timer
    
  Structure Struct_Timer
    StartTime.i
    Time.i
    TimerID.i
    TimeToCheck.i
  EndStructure
  
  Global NewList Timer.Struct_Timer()
  Global TimerIncludeDebug.i = #False
  
  Procedure.i UPDATE_TIMER(TimerID.i, Time.i, StartTime.i = #PB_Ignore)
    ForEach Timer()
      With Timer()
        If TimerID = \TimerID
          If StartTime <> #PB_Ignore
            \StartTime = StartTime
          EndIf
          \TimeToCheck = Time
          
          CompilerIf #TimerIncludeDebug
            Debug "Timer Update ID "+ TimerID +" OK"
          CompilerEndIf
          
        EndIf
      EndWith
    Next
  EndProcedure
  
  Procedure.i CONV_TIME_TO_(Time.i, Type.i = #TIMER_SEC)
    Select Type
      Case #TIMER_SEC
        ProcedureReturn (Time / 1000) % 60     
      Case #TIMER_MIN
        ProcedureReturn (Time / 60000) % 60     
      Case #TIMER_HOUR
        ProcedureReturn (Time / 3600000) % 24     
      Case #TIMER_DAY
        ProcedureReturn Time / 86400000
    EndSelect
  EndProcedure
  
  Procedure.i GET_TIMER_TIME_PAST(TimerID.i)
    Protected TimeNow.i = ElapsedMilliseconds()
    
    ForEach Timer()
      With Timer()
        If TimerID = \TimerID
          CompilerIf #TimerIncludeDebug
            Debug "Timer PAST "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn (TimeNow - \StartTime)
        EndIf
      EndWith
    Next
  EndProcedure
    
  Procedure.i GET_TIMER_TIME(TimerID.i)
    Protected TimeNow.i = ElapsedMilliseconds()
    
    ForEach Timer()
      With Timer()
        If TimerID = \TimerID
          CompilerIf #TimerIncludeDebug
            Debug "Timer Time "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn \TimeToCheck - (TimeNow - \StartTime)
        EndIf
      EndWith
    Next
  EndProcedure
    
  Procedure.i ADD_TIMER(StartTime.i, TimeToCheck.i, TimerID.i = #PB_Any)
    AddElement(Timer())
        
    If TimerID = #PB_Any
      TimerID = @Timer()
    EndIf
    
    With Timer()
      \StartTime   = StartTime
      \TimeToCheck = TimeToCheck
      \TimerID     = TimerID
    EndWith
    CompilerIf #TimerIncludeDebug
      Debug "Timer ADD "+TimerID+" OK"
    CompilerEndIf
    
    ProcedureReturn TimerID
  EndProcedure
  
  Procedure.i DELETE_TIMER(TimerID.i)
    ForEach Timer()
      With Timer()
        If \TimerID = TimerID
          DeleteElement(Timer())
          CompilerIf #TimerIncludeDebug
            Debug "Timer DELETE "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn #True
        EndIf
      EndWith
    Next
    ProcedureReturn #False
  EndProcedure
  
  Procedure.i TIMER_EXIST(TimerID.i)
    ForEach Timer()
      With Timer()
        If \TimerID = TimerID
          CompilerIf #TimerIncludeDebug
            Debug "Timer EXIST "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn #True
        EndIf
      EndWith
    Next
    
    ProcedureReturn #False
  EndProcedure
  
  Procedure.i CHECK_TIMER(TimerID.i)
    Protected TimeNow.i = ElapsedMilliseconds()
    
    ForEach Timer()
      With Timer()
        \Time = \TimeToCheck - (TimeNow - \StartTime)
        If \TimerID = TimerID And TimeNow - \StartTime >= \TimeToCheck
          CompilerIf #TimerIncludeDebug
            Debug "Timer CHECK "+TimerID+" OK"
          CompilerEndIf
          ProcedureReturn #True
        EndIf
      EndWith
    Next
    
    ProcedureReturn #False
  EndProcedure
  
  Procedure.i COUNT_TIMER()
    Protected Timer.i
    
    ForEach Timer()
      If CHECK_TIMER(Timer()\TimerID) = #True
        Timer + 1
      EndIf
    Next
    
    CompilerIf #TimerIncludeDebug
      Debug "Timer Count " + Str(Timer)
    CompilerEndIf
    
    ProcedureReturn Timer
  EndProcedure
  
EndModule
;-Example
CompilerIf #PB_Compiler_IsMainFile
  #Timer1 = 0
  #WaitTime = 5000
  
  Timer::ADD_TIMER(ElapsedMilliseconds(), #WaitTime, #Timer1)
  
  Repeat
    If Timer::CHECK_TIMER(#Timer1)
      Debug Str(#WaitTime)+" milliseconds have expired!"
      Timer::DELETE_TIMER(#Timer1)
      Break
    EndIf
  ForEver
CompilerEndIf