Подскажите, что не так с моей схемой? Хочу разделить безотложное чтение данных в стек и дальнейшую долгую обработку их главным потоком. Но поток с данными ждет все же основную обработку почему-то.
Это тестовая пиковая нагрузка. Она может случаться всего секунды 3 за минуту.
Add(MainForm,2953706,21,98)
{
link(onCreate,15325505:doEvent1,[])
}
Add(Thread,1595303,189,119)
{
@Hint=#45:Данные из TCP с безотложной записью в очередь|
Delay=100
link(onExec,10709922:doNext,[])
AddHint(2,42,33,13,Delay)
AddHint(-90,-57,177,26,@Hint)
}
Add(SafeMode,15768141,350,126)
{
Name="CritSection1"
link(onSafeMode,4481401:doPush,[])
AddHint(-29,37,72,13,Name)
}
Add(Label,14925684,665,140)
{
Left=80
Top=155
Width=10
Height=17
Caption="0"
}
Add(SafeMode,15450595,343,217)
{
Name="CritSection1"
link(onSafeMode,4481401:doPop,[(410,223)(410,139)])
AddHint(-29,40,72,13,Name)
}
Add(CounterEx,10709922,238,119)
{
Max=100000
link(onNext,4962318:doEvent1,[])
}
Add(Hub,15325505,112,112)
{
OutCount=4
link(onEvent2,1595303:doStart,[])
link(onEvent3,3645755:doStart,[(179,132)(179,223)])
}
Add(TimeCounter,13546177,350,63)
{
Precision=1
link(onStop,2513193:doEvent,[])
}
Add(Hub,4962318,280,119)
{
OutCount=3
link(onEvent1,13546177:doStart,[(305,125)(305,69)])
link(onEvent2,15768141:doSafeMode,[])
link(onEvent3,13546177:doStop,[(319,139)(319,76)])
}
Add(Debug,2513193,392,70)
{
WEName="Zanatost_potoka"
VDName=""
}
Add(Timer,11906121,476,175)
{
Interval=30
link(onTimer,3956007:doPop,[(529,181)(529,146)])
AddHint(-5,48,27,13,Interval)
}
Add(For,16666201,588,140)
{
@Hint=#17:Тестовая нагрузка|
End=1000
link(onEvent,6697411:doEvent,[])
AddHint(-42,46,112,13,@Hint)
}
Add(Debug,6697411,637,140)
{
WEName="Out"
VDName=""
link(onEvent,14925684:doText,[])
}
Add(Thread,3645755,231,217)
{
@Hint=#73:Читает потоком (не таймером) стек тоб не занять сейфмод долгой обработкой|
Delay=120
link(onExec,15450595:doSafeMode,[])
AddHint(-7,42,33,13,Delay)
AddHint(-66,77,198,39,@Hint)
}
Add(DeferredEvent,12176628,483,133)
{
@Hint=#30:Освобождает часть с потоками?!|
@Color=43775
InData=0
link(onDeferredEvent,3956007:doPush,[])
AddHint(-21,-44,185,13,@Hint)
}
Add(Stack,4481401,434,126)
{
link(onPop,12176628:doDeferredEvent,[])
}
Add(Timer,16388215,168,231)
{
Interval=120
AddHint(-4,41,33,13,Interval)
}
Add(Stack,3956007,539,133)
{
link(onPop,16666201:doFor,[])
}