Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
72
Task/Active-object/PureBasic/active-object.basic
Normal file
72
Task/Active-object/PureBasic/active-object.basic
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
Prototype.d ValueFunction(f.d, t.d)
|
||||
|
||||
Class IntegralClass
|
||||
Time0.i
|
||||
Mutex.i
|
||||
S.d
|
||||
Freq.d
|
||||
Thread.i
|
||||
Quit.i
|
||||
*func.ValueFunction
|
||||
|
||||
Protect Method Sampler()
|
||||
Repeat
|
||||
Delay(1)
|
||||
If This\func And This\Mutex
|
||||
LockMutex(This\Mutex)
|
||||
This\S + This\func(This\Freq, ElapsedMilliseconds()-This\Time0)
|
||||
UnlockMutex(This\Mutex)
|
||||
EndIf
|
||||
Until This\Quit
|
||||
EndMethod
|
||||
|
||||
BeginPublic
|
||||
Method Input(*func.ValueFunction)
|
||||
LockMutex(This\Mutex)
|
||||
This\func = *func
|
||||
UnlockMutex(This\Mutex)
|
||||
EndMethod
|
||||
|
||||
Method.d Output()
|
||||
Protected Result.d
|
||||
LockMutex(This\Mutex)
|
||||
Result = This\S
|
||||
UnlockMutex(This\Mutex)
|
||||
MethodReturn Result
|
||||
EndMethod
|
||||
|
||||
Method Init(F.d, *f)
|
||||
This\Freq = F
|
||||
This\func = *f
|
||||
This\Mutex = CreateMutex()
|
||||
This\Time0 = ElapsedMilliseconds()
|
||||
This\Thread = CreateThread(This\Sampler, This)
|
||||
ThreadPriority(This\Thread, 10)
|
||||
EndMethod
|
||||
|
||||
Method Release()
|
||||
This\Quit = #True
|
||||
WaitThread(This\Thread)
|
||||
EndMethod
|
||||
EndPublic
|
||||
|
||||
EndClass
|
||||
|
||||
;- Procedures for generating values
|
||||
Procedure.d n(f.d, t.d)
|
||||
; Returns nothing
|
||||
EndProcedure
|
||||
|
||||
Procedure.d f(f.d, t.d)
|
||||
; Returns the function of this task
|
||||
ProcedureReturn Sin(2*#PI*f*t)
|
||||
EndProcedure
|
||||
|
||||
;- Test Code
|
||||
*a.IntegralClass = NewObject.IntegralClass(0.5, @n()) ; Create the AO
|
||||
*a\Input(@f()) ; Start sampling function f()
|
||||
Delay(2000) ; Delay 2 sec
|
||||
*a\Input(@n()) ; Change to sampling 'nothing'
|
||||
Delay( 500) ; Wait 1/2 sec
|
||||
MessageRequester("Info", StrD(*a\Output())) ; Present the result
|
||||
*a= FreeObject
|
||||
Loading…
Add table
Add a link
Reference in a new issue