Timer Queues ab Windows 2000
Verfasst: 24.09.2008 03:56
Dies ist eine Übersetzung eines C Beispieles von Microsoft. Das Original,
sowie weitere Infos gibts hier
PB ab 4.30 (auch 64-Bit Version)
Windows only!
Diese Timerfunktionen ersetzen den MultiMedia Timer und werden von
Microsoft statt dessen empfohlen.
Vielleicht kanns ja einer gebrauchen
sowie weitere Infos gibts hier
PB ab 4.30 (auch 64-Bit Version)
Windows only!
Code: Alles auswählen
EnableExplicit
Import "kernel32.lib"
CreateTimerQueue()
CreateTimerQueueTimer(*phNewTimer, TimerQueue.i, *Callback, *Parameter, DueTime.i, Period.i, Flags.l)
DeleteTimerQueue(TimerQueue.i)
EndImport
Global gDoneEvent.i
OpenConsole()
Procedure TimerRoutine(*lpParam.Integer, TimerOrWaitFired.i)
If *lpParam = 0
PrintN("TimerRoutine *lpParam is #NULL")
Else
PrintN("Timer routine called. Parameter is " + Str(*lpParam\i))
EndIf
SetEvent_(gDoneEvent)
EndProcedure
Procedure Main()
Protected hTimer.i
Protected hTimerQueue.i
Protected arg.i = 123
; Use an event object To track the TimerRoutine execution
gDoneEvent = CreateEvent_(#Null, #True, #False, #Null)
If Not gDoneEvent
PrintN("CreateEvent failed " + Str(GetLastError_()))
ProcedureReturn 1
EndIf
; Create the timer queue
hTimerQueue = CreateTimerQueue()
If Not hTimerQueue
PrintN("CreateTimerQueue failed " + Str(GetLastError_()))
ProcedureReturn 2
EndIf
; Set a timer To call the timer routine in 10 seconds
If Not CreateTimerQueueTimer(@hTimer, hTimerQueue, @TimerRoutine(), @arg, 10000, 0, 0)
PrintN("CreateTimerQueueTimer failed " + Str(GetLastError_()))
ProcedureReturn 3
EndIf
; TODO: Do other useful work here
PrintN("Call timer routine in 10 seconds...")
; Wait For the timer-queue thread To complete using an event
; object. The thread will signal the event at that time.
If WaitForSingleObject_(gDoneEvent, #INFINITE) <> #WAIT_OBJECT_0
PrintN("WaitForSingleObject failed " + Str(GetLastError_()))
EndIf
CloseHandle_(gDoneEvent)
; Delete all timers in the timer queue
If Not DeleteTimerQueue(hTimerQueue)
PrintN("DeleteTimerQueue failed " + Str(GetLastError_()))
EndIf
ProcedureReturn 0
EndProcedure
Debug Main()
PrintN("")
Print("press return to end ")
Input()
CloseConsole()
Microsoft statt dessen empfohlen.
Vielleicht kanns ja einer gebrauchen
