Events: Difference between revisions

Content added Content deleted
m (→‎{{header|LFE}}: Tweaked for LFE)
Line 559: Line 559:
An event is often implemented with a control channel. A task is waiting for an object on the channel. When the event occurs, another task sends an object on this channel.
An event is often implemented with a control channel. A task is waiting for an object on the channel. When the event occurs, another task sends an object on this channel.


<lang Oforth>func: anEvent
<lang Oforth>: anEvent
{
| ch |
| ch |
Channel new ->ch
Channel new ->ch
#[ ch receive "Ok, event is signaled !" println ] &
#[ ch receive "Ok, event is signaled !" println ] &
System sleep(1000)
System sleep(1000)
ch send($myEvent)
ch send($myEvent) ;</lang>
}</lang>


An emitter is a general implementation for handling events : an emitter waits for events emitted and launches listeners that are waiting for those events.
An emitter is a general implementation for handling events : an emitter waits for events emitted and launches listeners that are waiting for those events.
<lang Oforth>func: anEvent2
<lang Oforth>import: emitter

{
: anEvent2
| e i |
| e i |
Emitter new(null) ->e
Emitter new(null) ->e
e onEvent($myEvent, #[ "Ok, event is signaled !" println ])
e onEvent($myEvent, #[ "Event is signaled !" println ])
10 loop: i [ System sleep(1000) e emit($myEvent) ]
10 loop: i [
1000 System sleep
e close
$myEvent e emit
}</lang>
]
e close ;</lang>


=={{header|Oz}}==
=={{header|Oz}}==