Везде, где вы раньше применяли таймера для выдачи событий из другой очереди применяйте компонент OtherQueueEvent (заменено на DeferredEvent (отложенное событие)) вместо таймера. Кроме того, элемент позволяет транслировать через себя данные
Компонент вы можете найти на SVN. При установке будет проситься во вкладку Controls (переведено во вкладку System)
Внимание! Имя компонента заменено на DeferredEvent (отложенное событие)
Пример, наглядно показывающий крэш программы при попытки удаления сз своего же события (верхняя часть), и применение DeferredEvent для разделений событий по времени вместо таймера (нижняя часть)
Add(MainForm,6208649,196,189)
{
Width=262
Height=228
Position=1
}
Add(Button,4244657,196,238)
{
Left=10
Top=40
TabOrder=-1
link(onClick,9260267:##add,[])
}
Add(Button,9979880,196,273)
{
Left=10
Top=65
TabOrder=-1
link(onClick,9260267:doDelete,[(254,279)(254,251)])
}
Add(MultiElementEx,13664646,280,378)
{
link(onResult,14628342:doValue,[])
link(onDelete,15487727:doData,[(331,391)(331,454)])
link(Op1,10884471:Var1,[(286,366)(321,366)(321,429)])
}
BEGIN_SDK
Add(EditMultiEx,12370993,21,21)
{
WorkCount=#5:##add|8:doDelete|7:##clear|
EventCount=#8:onResult|8:onDelete|
DataCount=#3:Op1|
Point(##add)
Point(##clear)
link(##add,14089078:doTimer,[(70,27)(70,48)])
link(doDelete,8262538:doEvent1,[(42,34)(42,97)])
}
Add(Math,9128440,231,42)
{
Op2=1
link(onResult,12370993:onResult,[(285,48)(285,27)])
link(Op1,12370993:Op1,[(237,32)(27,32)])
}
Add(Hub,8262538,63,91)
{
link(onEvent1,14089078:doStop,[(98,97)(98,55)])
link(onEvent2,12370993:onDelete,[(294,104)(294,34)])
}
Add(Timer,14089078,119,42)
{
Interval=15
Enable=1
link(onTimer,9128440:doOperation,[])
}
END_SDK
Add(Memory,14628342,350,378)
{
link(onData,6622035:doText,[])
}
Add(Label,6622035,399,378)
{
Left=10
Top=100
}
Add(Button,1463480,196,378)
{
Left=10
Top=120
TabOrder=-1
link(onClick,13664646:##add,[])
}
Add(Button,5614741,196,413)
{
Left=10
Top=145
TabOrder=-1
link(onClick,13664646:doDelete,[(254,419)(254,391)])
}
Add(MultiElementEx,9260267,280,238)
{
link(onResult,5960612:doValue,[])
link(onDelete,9260267:##clear,[(332,251)(332,285)(268,285)(268,258)])
link(Op1,5960612:Value,[(286,226)(321,226)(321,289)(356,289)])
}
BEGIN_SDK
Add(EditMultiEx,11371213,21,21)
{
WorkCount=#5:##add|8:doDelete|7:##clear|
EventCount=#8:onResult|8:onDelete|
DataCount=#3:Op1|
Point(##add)
Point(##clear)
link(##add,7498319:doTimer,[(70,27)(70,48)])
link(doDelete,13853942:doEvent1,[(42,34)(42,97)])
}
Add(Math,8716678,231,42)
{
Op2=1
link(onResult,11371213:onResult,[(285,48)(285,27)])
link(Op1,11371213:Op1,[(237,32)(27,32)])
}
Add(Hub,13853942,63,91)
{
link(onEvent1,7498319:doStop,[(98,97)(98,55)])
link(onEvent2,11371213:onDelete,[(294,104)(294,34)])
}
Add(Timer,7498319,119,42)
{
Interval=15
Enable=1
link(onTimer,8716678:doOperation,[])
}
END_SDK
Add(Memory,5960612,350,238)
{
link(onData,10891551:doText,[])
}
Add(Label,10891551,399,238)
{
Left=10
Top=20
}
Add(DeferredEvent,12154801,399,448)
{
InData=0
link(onDeferredEvent,6227579:doEvent1,[])
}
Add(DoData,15487727,350,448)
{
Data=Integer(5)
link(onEventData,12154801:doDeferredEvent,[])
link(Data,10884471:Var2,[])
}
Add(Edit,8220547,490,448)
{
Left=80
Top=145
Width=120
Cursor=1
Text=""
}
Add(Hub,6227579,441,448)
{
link(onEvent1,8220547:doText,[])
link(onEvent2,13664646:##clear,[(469,461)(469,502)(268,502)(268,398)])
}
Add(GetDataEx,10884471,350,424)
{
link(Data,14628342:Value,[])
}