Считал что Synchronize ждет исполнения события а DeferredEvent не ждет. Но выходит они оба не ждут? Правда, видно что DeferredEvent меньше таки грузит свой поток, ибо поток быстрее соседнего считает и сообщения от DeferredEvent приходят реже чем от Synchronize.
Add(MainForm,2953706,21,105)
{
}
Add(Thread,12578108,455,126)
{
Delay=0
link(onExec,10598358:doEvent,[])
}
Add(Timer,16683636,574,126)
{
Interval=1
Enable=1
AutoStop=1
link(onTimer,6441049:doMessage,[])
}
Add(Button,5158431,371,126)
{
Left=15
Top=80
Width=130
Caption="Synchronize"
link(onClick,4437896:doEvent1,[])
}
Add(Message,6441049,623,126)
{
Message="Synch"
}
Add(Synchronize,11621601,532,126)
{
link(onSync,16683636:doTimer,[])
}
Add(Debug,10598358,504,126)
{
WEName="Synch"
link(onEvent,11621601:doSynchronize,[])
}
Add(Thread,9288934,455,182)
{
Delay=0
link(onExec,15871113:doEvent,[])
}
Add(Timer,15160710,574,182)
{
Interval=1
Enable=1
AutoStop=1
link(onTimer,13800275:doMessage,[])
}
Add(Message,13800275,623,182)
{
Message="Deferred"
}
Add(Debug,15871113,504,182)
{
WEName="Deferred"
link(onEvent,3240971:doDeferredEvent,[])
}
Add(DeferredEvent,3240971,532,182)
{
link(onDeferredEvent,15160710:doTimer,[])
}
Add(Hub,4437896,420,126)
{
link(onEvent1,12578108:doStart,[])
link(onEvent2,9288934:doStart,[(445,139)(445,188)])
}
Можно, кстати, их использовать взаимозаменяемо для организации некоторого накопительного стека от разных потоков в один интерфейсный элемент без всяких мьютексов?
Add(Thread,12578108,455,126)
{
Delay=0
link(onExec,10598358:doEvent,[])
}
Add(Timer,16683636,574,126)
{
Interval=1
Enable=1
AutoStop=1
link(onTimer,5915712:doData,[])
}
Add(Button,5158431,371,126)
{
Left=15
Top=80
Width=130
Caption="Synchronize"
link(onClick,4437896:doEvent1,[])
}
Add(Message,6441049,742,126)
{
}
Add(Synchronize,11621601,532,126)
{
link(onSync,16683636:doTimer,[])
}
Add(Debug,10598358,504,126)
{
WEName="Synch"
link(onEvent,11621601:doSynchronize,[])
}
Add(Thread,9288934,455,182)
{
Delay=0
link(onExec,15871113:doEvent,[])
}
Add(Timer,15160710,574,182)
{
Interval=1
Enable=1
AutoStop=1
link(onTimer,12013476:doData,[])
}
Add(Message,13800275,742,182)
{
Message="Deferred"
}
Add(Debug,15871113,504,182)
{
WEName="Deferred"
link(onEvent,3240971:doDeferredEvent,[])
}
Add(DeferredEvent,3240971,532,182)
{
link(onDeferredEvent,15160710:doTimer,[])
}
Add(Hub,4437896,420,126)
{
link(onEvent1,12578108:doStart,[])
link(onEvent2,9288934:doStart,[(445,139)(445,188)])
}
Add(HubEx,14560959,707,126)
{
link(onEvent,6441049:doMessage,[])
}
Add(DoData,12013476,630,182)
{
Data=String(Deferred)
link(onEventData,14560959:doWork3,[(711,188)])
}
Add(DoData,5915712,630,126)
{
Data=String(Synch)
link(onEventData,14560959:doWork2,[])
}