Вверх ↑
Этот топик читают: Гость
Ответов: 88
Рейтинг: 3
#1: 2018-05-13 19:53:15 ЛС | профиль | цитата
Здравствуйте.
Подскажите, пожалуйста, как осуществить такую логику как в схеме правильно.

Ну а вообще задача - многопоточное выполнение списка команд. Может есть готовое решение как выполнить N число команд в n число потоков?


Add(MainForm,2953706,161,224)
{
Width=1131
Height=441
link(onCreate,2335688:doEvent1,[])
}
Add(StrList,3024082,301,140)
{
Strings=#2:11|2:12|2:13|2:14|2:15|2:16|2:17|2:18|2:19|2:20|2:21|2:22|2:23|2:24|2:25|2:26|2:27|2:28|2:29|0:|
}
Add(MultiElementEx,2519228,371,273)
{
link(onEvent2,3632768:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,1479086,21,21)
{
WorkCount=#5:##add|8:##delete|8:##select|
EventCount=#8:onEvent2|
VarCount=#7:##count|
Width=321
Height=277
Point(##add)
Point(##delete)
Point(##count)
Point(##select)
link(##add,7994554:doValue,[])
link(##select,10464261:doStart,[(42,41)(42,132)])
}
Add(Thread,10464261,63,126)
{
Delay=5
FastStop=0
link(onExec,6364545:doEvent1,[])
}
Add(Hub,6364545,112,126)
{
link(onEvent1,6528198:doBeep,[])
link(onEvent2,12454658:doData,[(133,139)(133,167)])
}
Add(Memory,7994554,140,21)
{
}
Add(DoData,12454658,140,161)
{
link(onEventData,1479086:onEvent2,[(234,167)(234,27)])
link(Data,7994554:Value,[])
}
Add(Beep,6528198,161,126)
{
Freq=0
Duration=500
}
END_SDK
Add(DoData,16498831,238,238)
{
link(onEventData,2519228:##delete,[(289,244)(289,286)])
}
Add(Hub,2335688,210,238)
{
link(onEvent1,16498831:doData,[])
link(onEvent2,9848926:doEnum,[])
}
Add(Button,12081273,35,315)
{
Left=80
Top=10
link(onClick,13965546:doFor,[])
}
Add(CounterEx,4340032,315,315)
{
Min=-1
Default=-1
link(onNext,2519228:##select,[(359,321)(359,293)])
}
Add(Memo,1650982,483,224)
{
Left=40
Top=45
Width=1075
Height=330
}
Add(ArrayEnum,9848926,315,245)
{
link(onItem,2519228:##add,[(359,251)(359,279)])
link(Array,3024082:Array,[])
}
Add(For,13965546,98,315)
{
IncludeEnd=1
link(onEvent,2823561:doWork2,[])
link(End,10768509:Text,[])
}
Add(Edit,10768509,105,273)
{
Left=305
Top=10
Text="3"
DataType=2
}
Add(Hub,3632768,413,273)
{
link(onEvent1,1650982:doAdd,[(436,279)(436,230)])
link(onEvent2,2823561:doWork3,[(442,286)(442,363)(186,363)])
}
Add(HubEx,2823561,182,315)
{
link(onEvent,4340032:doNext,[])
}

карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 3522
Рейтинг: 616
#2: 2018-05-14 12:45:48 ЛС | профиль | цитата
Думаю, так:

Add(MainForm,12406545,14,42)
{
Width=419
Height=341
}
Add(MultiElementEx,2519228,490,182)
{
Mode=1
link(onEvent2,5817581:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,1479086,21,21)
{
WorkCount=#5:##add|7:##clear|
EventCount=#8:onEvent2|
VarCount=#7:##count|
Width=825
Height=592
VOffset=21
HOffset=42
Point(##add)
Point(##count)
Point(##clear)
link(##add,7528055:doEvent1,[(31,48)(31,111)])
}
Add(Thread,10464261,105,287)
{
Delay=5
FastStop=0
link(onExec,6528198:doBeep,[])
}
Add(Memory,7994554,245,105)
{
}
Add(Beep,6528198,168,287)
{
Freq=1000
Duration=500
link(onBeep,4784562:doData,[])
}
Add(Hub,7528055,42,105)
{
OutCount=3
link(onEvent1,7994554:doValue,[])
link(onEvent3,10464261:doStart,[(73,125)(73,293)])
}
Add(InfoTip,9197701,168,49)
{
Info=#61:Перед запуском нужно подготовить все данные для текущей схемы|
Width=169
Height=165
}
Add(SafeMode,1864627,665,42)
{
@Hint=#46:Защита одновременного доступа к правым выходам|
Name="Multi"
link(onSafeMode,1479086:onEvent2,[])
AddHint(-82,44,197,26,@Hint)
}
Add(DoData,4784562,245,287)
{
link(onEventData,1864627:doSafeMode,[(504,293)(504,48)])
link(Data,7994554:Value,[])
}
END_SDK
Add(Button,12081273,105,175)
{
Left=70
Top=5
Caption="Start"
link(onClick,1913497:doEvent1,[])
}
Add(Memo,1650982,910,182)
{
Left=10
Top=30
Width=385
Height=210
ScrollBars=3
}
Add(For,13965546,238,182)
{
IncludeEnd=1
link(onEvent,2519228:##add,[])
link(End,10467670:Var2,[])
}
Add(Edit,10768509,245,63)
{
Left=10
Top=5
Text="3"
DataType=2
}
Add(Synchronize,8301477,854,182)
{
link(onSync,1650982:doAdd,[])
}
Add(LineBreakEx,1151062,224,147)
{
Caption="max"
}
Add(LineBreakEx,9699712,588,210)
{
Caption="max"
Type=1
link(OnEvent,5263125:doMax,[])
}
Add(CounterEx,5263125,651,203)
{
Min=1
Default=1
Point(doMax)
Point(onThroughMax)
Point(doReset)
link(onThroughMax,3632768:doEvent1,[])
}
Add(LineBreakEx,5200338,784,252)
{
Caption="clear"
}
Add(LineBreakEx,491945,427,189)
{
Caption="clear"
Type=1
link(OnEvent,2519228:##clear,[])
}
Add(DoData,4952977,182,147)
{
link(onEventData,1151062:doWork,[])
link(Data,10467670:Var1,[(188,117)])
}
Add(Hub,1913497,147,175)
{
link(onEvent1,4952977:doData,[(171,181)(171,153)])
link(onEvent2,13965546:doFor,[])
}
Add(GetDataEx,10467670,245,112)
{
link(Data,10768509:Text,[])
}
Add(Hub,5817581,616,182)
{
link(onEvent1,7069843:doWork2,[])
link(onEvent2,5263125:doNext,[(637,195)(637,209)])
}
Add(DoData,9281619,749,210)
{
Data=String(Finish)
link(onEventData,7069843:doWork3,[(795,216)])
}
Add(HubEx,7069843,791,182)
{
link(onEvent,8301477:doSynchronize,[])
}
Add(InfoTip,9438761,581,119)
{
Info=#47:Очистка контейнера после окончания всех потоков|
Width=253
Height=193
}
Add(Hub,3632768,700,210)
{
OutCount=3
link(onEvent1,9281619:doData,[])
link(onEvent2,10520509:doTimer,[(731,223)(731,258)])
link(onEvent3,5263125:doReset,[(722,230)(722,257)(639,257)(639,223)])
}
Add(MMTimer,10520509,742,252)
{
AutoStop=1
link(onTimer,5200338:doWork,[])
}

В случае с некоторым "списком" работы список нужно сначала разделить между всеми потоками, затем каждому потоку при создании подсунуть его часть, а он уже по ней будет работать.
карма: 12

0
Ответов: 88
Рейтинг: 3
#3: 2018-05-14 14:39:39 ЛС | профиль | цитата
Объединил, вот что получилось:

Add(StrList,3024082,357,70)
{
Strings=#2:11|2:12|2:13|2:14|2:15|2:16|2:17|2:18|2:19|2:20|0:|
Point(EndIdx)
}
Add(CounterEx,4340032,280,161)
{
Min=-1
Max=99999
Default=-1
Point(doReset)
link(onNext,11182645:doCompare,[])
}
Add(MainForm,12406545,84,259)
{
Width=419
Height=480
}
Add(MultiElementEx,199400,476,161)
{
Mode=1
link(onEvent2,5817581:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,2036579,21,21)
{
WorkCount=#5:##add|7:##clear|
EventCount=#8:onEvent2|
VarCount=#7:##count|
Width=825
Height=592
VOffset=21
HOffset=42
Point(##add)
Point(##clear)
Point(##count)
link(##add,7528055:doEvent1,[(31,48)(31,111)])
}
Add(Thread,5496194,105,238)
{
Delay=5
FastStop=0
link(onExec,15717251:doBeep,[])
}
Add(Memory,1055455,245,105)
{
}
Add(Beep,15717251,168,238)
{
Freq=0
Duration=200
link(onBeep,4784562:doData,[])
}
Add(Hub,7528055,42,105)
{
OutCount=3
link(onEvent1,1055455:doValue,[])
link(onEvent3,5496194:doStart,[(73,125)(73,244)])
}
Add(InfoTip,9197701,168,49)
{
Info=#61:Перед запуском нужно подготовить все данные для текущей схемы|
Width=169
Height=165
}
Add(SafeMode,1864627,665,42)
{
@Hint=#46:Защита одновременного доступа к правым выходам|
Name="Multi"
link(onSafeMode,2036579:onEvent2,[])
AddHint(-85,83,197,26,@Hint)
}
Add(DoData,4784562,245,238)
{
link(onEventData,1864627:doSafeMode,[(504,244)(504,48)])
link(Data,1055455:Value,[])
}
END_SDK
Add(Button,15490012,133,147)
{
Left=70
Top=5
Caption="Start"
Point(doEnabled)
link(onClick,1913497:doEvent1,[])
}
Add(Memo,5715788,889,161)
{
Left=10
Top=30
Width=385
Height=410
ScrollBars=3
}
Add(For,1788160,217,161)
{
IncludeEnd=1
link(onEvent,13910223:doWork2,[])
link(End,14195736:Text,[])
}
Add(Edit,14195736,224,84)
{
Left=10
Top=5
Text="3"
DataType=2
Point(doEnabled)
}
Add(Synchronize,15495284,784,161)
{
link(onSync,7033801:doEvent1,[])
}
Add(Hub,1913497,182,147)
{
OutCount=3
link(onEvent1,4812930:In,[])
link(onEvent2,4340032:doReset,[(231,160)(231,174)])
link(onEvent3,1788160:doFor,[])
}
Add(Hub,5817581,532,161)
{
OutCount=3
link(onEvent1,4297693:doWork2,[])
link(onEvent2,4163685:doNext,[])
link(onEvent3,7646034:doCompare,[(559,181)(559,223)])
}
Add(DoData,9281619,672,217)
{
Data=String(Finish)
link(onEventData,4297693:doWork3,[(711,223)])
}
Add(InfoTip,9438761,525,105)
{
Info=#47:Очистка контейнера после окончания всех потоков|
Width=246
Height=193
}
Add(ArrayRW,12234823,371,161)
{
link(onRead,199400:##add,[])
link(Array,3024082:Array,[])
}
Add(Hub,7033801,840,161)
{
link(onEvent1,5715788:doAdd,[])
link(onEvent2,13910223:doWork3,[(870,174)(870,311)(263,311)])
}
Add(HubEx,13910223,259,161)
{
link(onEvent,4340032:doNext,[])
}
Add(LineBreakEx,5200338,721,252)
{
Caption="clear"
}
Add(LineBreakEx,491945,420,168)
{
Caption="clear"
Type=1
link(OnEvent,199400:##clear,[])
}
Add(If_else,7646034,581,217)
{
Type=4
link(onTrue,4826277:doEvent1,[])
link(Op1,4163685:Count,[])
link(Op2,12148439:Var3,[(594,138)])
}
Add(CounterEx,4163685,581,168)
{
Max=99999
Point(doReset)
}
Add(Hub,4826277,630,217)
{
OutCount=4
link(onEvent1,9281619:doData,[])
link(onEvent2,12658103:doTimer,[(658,230)(658,258)])
link(onEvent3,4163685:doReset,[(653,237)(653,264)(568,264)(568,181)])
link(onEvent4,2075785:In,[])
}
Add(HubEx,4297693,707,161)
{
link(onEvent,15495284:doSynchronize,[])
}
Add(If_else,11182645,322,161)
{
Type=1
link(onTrue,12234823:doRead,[])
link(Op2,12148439:Var1,[(335,138)])
}
Add(GetDataEx,12148439,364,133)
{
link(Data,3024082:Count,[])
}
Add(MMTimer,12658103,672,252)
{
Interval=33
Enable=1
AutoStop=1
link(onTimer,5200338:doWork,[])
}
Add(Switch,10043234,56,98)
{
DataOn=Integer(1)
DataOff=Integer(0)
Default=0
Point(doOn)
Point(State)
link(onSwitch,1892572:doEvent1,[])
}
Add(Hub,1892572,98,98)
{
link(onEvent1,14195736:doEnabled,[])
link(onEvent2,15490012:doEnabled,[(122,111)(122,153)])
}
Add(LineBreak,1005586,14,105)
{
Caption="off"
link(Out,10043234:doReset,[])
Primary=[4812930,196,42]
}
Add(LineBreak,1829902,21,112)
{
Caption="on"
link(Out,10043234:doOn,[])
Primary=[2075785,707,126]
}

Работает, спасибо.
карма: 0

0
3
Сообщение
...
Прикрепленные файлы
(файлы не залиты)