------------ Дoбавленo в 20.29:
И снова возвращаюсь к прошлой проблеме. 1nd1g0, разъясни еще с критическими секциями: почему этот пример считает разные значения в дебаге и отрабатывает неправильно при несколько разовом нажатии +100 хоть в схеме с сейфмод, хоть без него?
Add(MultiElement,13162162,168,420)
{
@Hint=#29:Новый поток с теми же данными|
@Color=0
link(onEvent1,12643708:doEvent,[])
}
BEGIN_SDK
Add(EditMulti,1509263,21,21)
{
EventCount=1
WorkCount=1
Width=265
Height=186
link(doWork1,2799306:doSafeMode,[(91,27)(91,41)])
}
Add(StackEx,8158179,217,49)
{
StackType=0
Point(Count)
Point(onEmpty)
link(onPop,1912671:doValue,[(261,62)(261,100)(58,100)(58,139)])
}
Add(SafeMode,2799306,161,35)
{
Name="izmenen"
link(onSafeMode,8158179:doPush,[(205,41)(205,55)])
}
Add(SafeMode,6926774,161,77)
{
Name="izmenen"
WaitMode=1
link(onSafeMode,8158179:doPop,[(202,83)(202,62)])
}
Add(Timer,10398723,63,77)
{
Interval=25
link(onTimer,5564047:doCompare,[])
}
Add(If_else,5564047,105,77)
{
Op2=Integer(0)
link(onTrue,6926774:doSafeMode,[])
link(Op1,14659451:Busy,[(111,65)(115,65)(115,177)(118,177)])
}
Add(Thread,14659451,112,133)
{
Delay=0
FastStop=0
link(onExec,368420:doData,[])
}
Add(Memory,1912671,70,133)
{
link(onData,14659451:doStart,[])
}
Add(DoData,368420,161,133)
{
link(onEventData,1509263:onEvent1,[(239,139)(239,27)])
link(Data,1912671:Value,[(167,121)(121,121)(121,177)(76,177)])
}
END_SDK
Add(Timer,7369915,49,133)
{
Interval=1
AutoStop=100
OverCall=1
link(onTimer,13571822:doWork1,[(123,139)])
}
Add(MainForm,1433557,315,581)
{
Height=185
Caption="Пример использования WaitObject"
}
Add(Debug,16768630,140,182)
{
WEName="1"
link(onEvent,3157026:doWork1,[])
}
Add(Debug,12198587,210,182)
{
WEName="1"
link(onEvent,9010111:doFor,[])
}
Add(For,9010111,252,182)
{
End=100
IncludeEnd=1
link(onEvent,13816107:doText,[])
}
Add(Edit,13816107,301,182)
{
Left=270
Top=18
Width=95
Text=""
}
Add(Button,3594207,28,42)
{
Left=10
Top=20
Caption="+100"
link(onClick,7369915:doTimer,[(72,48)(72,94)(37,94)(37,139)])
}
Add(Button,16146923,28,175)
{
Left=10
Top=40
Caption="+1"
Data=Integer(2)
link(onClick,13571822:doWork2,[(93,181)(93,146)])
}
Add(HubEx,13571822,119,140)
{
Angle=1
link(onEvent,16768630:doEvent,[(123,188)])
}
Add(MultiElement,3157026,168,182)
{
@Hint=#29:Новый поток с теми же данными|
@Color=0
link(onEvent1,12198587:doEvent,[])
}
BEGIN_SDK
Add(EditMulti,14722224,21,21)
{
EventCount=1
WorkCount=1
Width=265
Height=186
link(doWork1,8214537:doPush,[(119,27)(119,55)])
}
Add(StackEx,8214537,217,49)
{
StackType=0
Point(Count)
Point(onEmpty)
link(onPop,14380976:doValue,[(261,62)(261,100)(58,100)(58,139)])
}
Add(Timer,8337377,63,77)
{
Interval=25
link(onTimer,15039216:doCompare,[])
}
Add(If_else,15039216,105,77)
{
Op2=Integer(0)
link(onTrue,8214537:doPop,[(177,83)(177,62)])
link(Op1,3444956:Busy,[(111,65)(115,65)(115,177)(118,177)])
}
Add(Thread,3444956,112,133)
{
Delay=0
FastStop=0
link(onExec,10866645:doData,[])
}
Add(Memory,14380976,70,133)
{
link(onData,3444956:doStart,[])
}
Add(DoData,10866645,161,133)
{
link(onEventData,14722224:onEvent1,[(239,139)(239,27)])
link(Data,14380976:Value,[(167,121)(121,121)(121,177)(76,177)])
}
END_SDK
Add(Timer,15652490,56,371)
{
Interval=1
AutoStop=100
OverCall=1
link(onTimer,15355477:doWork1,[(130,377)])
}
Add(Debug,3116863,147,420)
{
WEName="1"
link(onEvent,13162162:doWork1,[])
}
Add(Debug,12643708,217,420)
{
WEName="1"
link(onEvent,2187826:doFor,[])
}
Add(For,2187826,259,420)
{
End=100
IncludeEnd=1
link(onEvent,773462:doText,[])
}
Add(Edit,773462,308,420)
{
Left=270
Top=88
Width=95
Text=""
}
Add(Button,12642026,35,280)
{
Left=10
Top=90
Caption="+100"
link(onClick,15652490:doTimer,[(79,286)(79,332)(44,332)(44,377)])
}
Add(Button,589894,35,413)
{
Left=10
Top=110
Caption="+1"
Data=Integer(2)
link(onClick,15355477:doWork2,[(100,419)(100,384)])
}
Add(HubEx,15355477,126,378)
{
Angle=1
link(onEvent,3116863:doEvent,[(130,426)])
}
Компонент For поставлен как нагрузка схеме.