main work function
push event to event listener if it exists
send signal to signal processor if it exists
struct TestStruct { double x, y; string info; immutable(int)[] data; } auto ts = TestStruct( 3.14, 2.7, "hello", [ 2, 3, 4 ] ); class TestElement: WorkElement { override void process(){} } class TestSignalProcessor : SignalProcessor { void processSignal( in Signal s ) { assert( s.code == 0 ); } } auto elem = new TestElement; elem.setSignalProcessor( new TestSignalProcessor ); elem.sendSignal( Signal(0) ); size_t cnt = 0; elem.setEventListener( new class EventProcessor { void processEvent( in Event ev ) { cnt++; assert( ev.as!TestStruct == ts ); } }); auto ev = Event( 8, ts ); elem.pushEvent( ev ); elem.pushEvent( const Event( ev ) ); elem.pushEvent( shared Event( ev ) ); elem.pushEvent( immutable Event( ev ) ); elem.pushEvent( const shared Event( ev ) ); elem.pushEvent( shared const Event( ev ) ); elem.pushEvent( immutable shared Event( ev ) ); elem.pushEvent( shared immutable Event( ev ) ); assert( cnt == 8 );
Inner interpret of thread
action must be in: * preparation -> ctor * last actions before start -> process special input event * actions on pause -> process special input event * processing -> process * terminate all -> selfDestroy( external memory manager )