nesco писал(а):
Зверство, причем, полное -- запускать потои в потоке. Вопрос автору -- зачем Учусь, экспертами по HiAsm не рождаются.
В этой теме задавал вопрос:"И разве контейнер создает оделенный поток?"
Ответа не дождался.
------------ Дoбавленo в 11.12:
Изменил пример.
Add(MainForm,2953706,259,175)
{
Width=374
Height=113
BorderStyle=1
}
Add(Edit,11641370,581,147)
{
Left=140
Top=15
Width=215
ColorSp=-16777215
Text="c:UsersSashaoliDocuments"
ReadOnly=0
}
Add(Button,15167945,357,147)
{
Left=10
Top=15
Width=125
Caption="Папка для анализа"
link(onClick,5279826:doBrowse,[])
}
Add(Browse,5279826,399,147)
{
Title="Select Pack Folder"
NewStyle=0
NewDirButton=1
link(onBrowse,429033:doEvent1,[])
}
Add(FileSearch,16211729,397,407)
{
@Hint=#32:Перебор файлов в выбранной папке|
TimeType=1
link(onSearch,3855596:doEvent1,[])
link(onEndSearch,2834627:doEvent1,[(444,420)(444,482)])
link(Dir,744672:Var,[])
}
Add(MultiElementEx,859352,621,476)
{
@Hint=#35:Схема вызывается для каждого потока|
Mode=1
link(StringArray,11850414:Array,[])
AddHint(87,-2,183,26,@Hint)
}
BEGIN_SDK
Add(EditMultiEx,9781944,28,21)
{
WorkCount=#5:##add|8:##select|24:doStart=Запускает процес|
EventCount=#28:onEnd=Работа схемы завершена|29:onResult=Результат вычислений|
VarCount=#7:##count|7:##index|21:State=Состояние схемы|
DataCount=#32:StringArray=Масив путей к файлам|0:|
Width=335
Height=172
HOffset=30
Point(##add)
Point(##select)
Point(##count)
Point(##index)
link(##add,4378916:doEnum,[(46,27)(46,55)])
link(doStart,965417:doEnum,[(38,41)(38,118)])
link(State,5687178:State,[(78,172)(174,172)])
}
Add(StrList,2252093,105,49)
{
Point(Stream)
Point(doLoadFromStream)
}
Add(ArrayEnum,965417,119,112)
{
link(onItem,4290383:doLength,[])
link(onEndEnum,5687178:doSwitch,[])
link(Array,2252093:Array,[])
}
Add(ArrayEnum,4378916,58,49)
{
link(onItem,2252093:doAdd,[])
link(Array,9781944:StringArray,[])
}
Add(Switch,5687178,168,119)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
link(onSwitch,9781944:onEnd,[(212,125)(212,27)])
}
Add(Length,4290383,224,112)
{
link(onLength,7600485:doCalc,[])
}
Add(MathParse,7600485,280,112)
{
MathStr="%1+%0"
link(onResult,9781944:onResult,[(333,118)(333,34)])
link(X1,4290383:Result,[(286,100)(265,100)(265,158)(230,158)])
}
END_SDK
Add(Hub,3855596,453,407)
{
link(onEvent1,11850414:doAdd,[])
link(onEvent2,15446539:doNext,[])
}
Add(GlobalVar,744672,404,378)
{
Name="sours_fold"
}
Add(Button,9416412,298,407)
{
Left=235
Top=50
Width=120
Caption="Анализировать"
link(onClick,6514589:doStart,[])
}
Add(For,9795724,516,483)
{
@Hint=#31:Цикл запуска процесса в потоках|
IncludeEnd=1
link(onEvent,15965135:doEvent1,[])
link(End,859352:##count,[(529,470)(558,470)(558,520)(627,520)])
AddHint(-241,19,188,13,@Hint)
}
Add(Label,8815368,552,273)
{
Left=175
Top=55
}
Add(GlobalVar,9241815,497,147)
{
Name="sours_fold"
Data=String()
link(onValue,11641370:doText,[])
}
Add(CounterEx,15446539,502,414)
{
@Hint=#48:Счетчик максимального количества файлов в потоке|
Min=1
Max=500
Point(onThroughMax)
Point(doReset)
Point(doMax)
Point(Max)
link(onThroughMax,14749321:doEvent1,[])
AddHint(0,-56,200,26,@Hint)
}
Add(Hub,14749321,544,421)
{
OutCount=3
link(onEvent1,2363410:doWork1,[(590,427)])
link(onEvent2,11850414:doClear,[(572,434)(572,420)])
link(onEvent3,15446539:doReset,[(568,441)(568,454)(490,454)(490,427)])
}
Add(Hub,2834627,453,476)
{
link(onEvent1,2363410:doWork2,[])
link(onEvent2,9795724:doFor,[])
}
Add(StrList,11850414,607,407)
{
@Hint=#31:Список файлов для одного потока|19:Для каждого - новый|
AddHint(67,-1,190,26,@Hint)
}
Add(UpDown,6202415,377,266)
{
Left=150
Top=50
Max=6
Min=1
Position=2
link(onPosition,12850526:doText,[])
}
Add(FileSearch,12643089,490,189)
{
@Hint=#35:Количество файлов в выбранной папке|
TimeType=1
link(Dir,9241815:Var,[])
AddHint(67,1,186,26,@Hint)
}
Add(Edit,12850526,426,266)
{
Left=115
Top=50
Width=35
Text="2"
link(onChange,14076929:doWork2,[])
link(Str,6038432:Var2,[])
}
Add(MathParse,6828647,483,266)
{
MathStr="trunc(%2/%1)+1"
ResultType=0
link(onResult,8996694:doEvent1,[])
link(X1,6038432:Var3,[(489,250)])
link(X2,12643089:Count,[])
}
Add(GetDataEx,6038432,426,245)
{
Angle=3
link(Data,6202415:Position,[(356,250)(356,306)(383,306)])
}
Add(Hub,429033,448,147)
{
OutCount=3
link(onEvent1,9241815:doValue,[])
link(onEvent2,12643089:doSearch,[(480,160)(480,195)])
link(onEvent3,14076929:doWork1,[(472,167)])
}
Add(HubEx,14076929,468,266)
{
link(onEvent,6828647:doCalc,[])
}
Add(Hub,8996694,524,266)
{
link(onEvent1,14983954:In,[])
link(onEvent2,8815368:doText,[])
}
Add(Thread,6514589,348,407)
{
FastStop=0
link(onExec,16211729:doSearch,[])
}
Add(Label,7620334,293,266)
{
Left=15
Top=55
Width=90
Height=17
Caption="Number of threads"
}
Add(LineBreak,8319707,453,428)
{
@Color=65535
link(Out,15446539:doMax,[])
Primary=[14983954,148,-162]
}
Add(HubEx,2363410,586,476)
{
link(onEvent,859352:##add,[])
}
Add(Hub,15965135,567,483)
{
link(onEvent1,859352:##select,[])
link(onEvent2,859352:doStart,[])
}
Add(InfoTip,2424062,287,238)
{
Info=#33:Расчет количества файлов на поток|
VAlign=2
Width=351
Height=88
}
Add(StyleXP,5108433,259,140)
{
}
ситуация 1
коп.1 - завершено = да
коп.2 - завершено = нет
коп.3 - завершено = да
.....
все завершено = нет (Ждемс)
ситуация 2
коп.1 - завершено = да
коп.2 - завершено = да
коп.3 - завершено = да
.....
все завершено = ДА (Выводим сообщение на экран с результатом, конечный результат = сложение всех результатов)
Возможно применил неправильно MathParse в контейнере...