Вверх ↑
Этот топик читают: Гость
Ответов: 824
Рейтинг: 138
#16: 2013-03-08 21:42:47 ЛС | профиль | цитата
Tad писал(а):
Да, у тебя в схеме нарушен порядок событий

Ткните дурака носом.
карма: 1

0
Ответов: 1536
Рейтинг: 176
#17: 2013-03-08 21:45:40 ЛС | профиль | цитата
sashaoli, есть такое понятие, как процессорное время (независимо от количества ядер). Если мы совсем откажемся ,например, от элемента Thread, то мы нагрузим наш процессор почти на 100%. А с Thread, мы будем разделять это время с внутренними, системными процессами. Т.е. в процессе исполнения нашего кода, система будет отводить время для опроса собственных (системных) сообщений, которым по умолчанию она отводит приоритетную роль. Создавая программно отдельный поток, мы нисколько не ускоряем основной процесс, а наоборот замедляем, забивая стек сообщений дополнительными командами разрыва или переходами разных процессов, которые мы программно размножили. И это при том, что среди команд присутствуют команды обращения к HD.
Tad писал(а):
Да, у тебя в схеме нарушен порядок событий
Истинно. А, вообще сегодня праздник, пора бы вспомнить и о них, милых, красивых, нежных, обаятельных.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 824
Рейтинг: 138
#18: 2013-03-08 22:10:56 ЛС | профиль | цитата
[flood]Всех поздравил, все довольны,а для меня в последнее время праздников нет.[/flood]
------------ Дoбавленo в 22.10:
Проверил для себя, при данном методе идет замедление.
Не очень большое, что так, что эдак... почти одно и тоже.
Так что с копированием пример не удачный.
Но всеже интересно где нарушен порядок действий?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#19: 2013-03-08 22:12:41 ЛС | профиль | цитата
sashaoli, ну хотя-бы
1. MainForm.onCreate включает на поиск компонент FileSearch Зачем, если sours_fold пустое ?
2. После этого ты заставляешь 0/2 компонент MathParse
З а ч е м ?????
и т.д.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#20: 2013-03-08 22:20:15 ЛС | профиль | цитата
sours_fold у меня по умолчанию был записан путь, убрал перед тем как выложить на форум.
каждый раз при тестировании как то в лом было выбирать заново папки.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#21: 2013-03-08 22:40:55 ЛС | профиль | цитата
Я не знаю, что где было записано и что кто и когда удалил. Я анализировал выложенную тобой схему.
Верхний кусок я бы делал так:
code_30532.txtчтобы не искать файлы в исходной папке два раза.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_30532.txt [2.4KB] [141]
Ответов: 824
Рейтинг: 138
#22: 2013-03-09 00:57:50 ЛС | профиль | цитата
Tad писал(а):
Верхний кусок я бы делал так:

Можно и так.
[flood]А теперь:
при условии, что нужно обязательно выбирать каталог,
внесите изменения в схему, новый компонент, изменение связи и т.п. запустите.
Повторите операцию 10 раз. [/flood]
Вы мне указали на точку ArrayEnum.onEndEnum, есть тут такая точка, и как с ней обращаться.
Что нужно сделать чтобы узнать, что копия схемы завершила работу.
То есть:
ситуация 1
коп.1 - завершено = да
коп.2 - завершено = нет
коп.3 - завершено = да
.....
все завершено = нет

ситуация 2
коп.1 - завершено = да
коп.2 - завершено = да
коп.3 - завершено = да
.....
все завершено = ДА (УРА! Пляшем! Радуемся! Выводим сообщение на экран)
Где то так.

карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#23: 2013-03-09 06:08:34 ЛС | профиль | цитата
Зверство, причем, полное -- запускать потои в потоке. Вопрос автору -- зачем
Для таких целей достаточно иметь всего один внешний поток, который не будеь тормозить графическую оболочку, остальное сделает система, это ее проблемы
карма: 22

0
Ответов: 824
Рейтинг: 138
#24: 2013-03-09 11:12:34 ЛС | профиль | цитата
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 в контейнере...
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#25: 2013-03-09 11:32:23 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2021-05-22 07:26:30
карма: 0

0
Ответов: 824
Рейтинг: 138
#26: 2013-03-09 12:16:35 ЛС | профиль | цитата
46.165.5.26 писал(а):
вариант проверки окончания всех копирований (схему не проверял, просто набросок)

Так работать не будет:
Вы пытаетесь сравнить количество схем с нулем.
Из справки:
Events Созданное событие является глобальным для текущей сессии пользователя и может использоваться в рамках нескольких программ одновременно.

карма: 1

0
Ответов: 8926
Рейтинг: 823
#27: 2013-03-09 14:58:52 ЛС | профиль | цитата
sashaoli, результат проверки на скорость (2500 файлов в папке ~1 Гб общим весом)
Без_потоков_С_потоками.jpg
карма: 19

0
файлы: 1Без_потоков_С_потоками.jpg [105.2KB] [298]
Ответов: 16884
Рейтинг: 1239
#28: 2013-03-09 15:21:51 ЛС | профиль | цитата
Леонид, а с помощью DirTools ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#29: 2013-03-09 16:21:42 ЛС | профиль | цитата
Леонид
Спасибо за наглядный, и убедительный пример.
Век живи, век учись. Тема, наверное, для всех была интересна и познавательна.
Надеюсь другие "новички" прочитав тему, не захотят копировать файлы в потоках

Переделал схему без копирования
Ответил на собой же поставленные вопросы, только вываливается ошибка:
code_30538.txt
http://forum.hiasm.com/forum_serv.php?q=56&id=3495
------------ Дoбавленo в 16.21:
Кто нибудь....!!!!!
В чем причина ошибки???
карма: 1

0
файлы: 1code_30538.txt [7.4KB] [175]
Ответов: 16884
Рейтинг: 1239
#30: 2013-03-09 16:22:32 ЛС | профиль | цитата
sashaoli писал(а):
только вываливается ошибка:
Самоубийство не допускается.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)