Вверх ↑
Этот топик читают: Гость
Ответов: 274
Рейтинг: 47
#31: 2013-03-09 16:31:15 ЛС | профиль | цитата
code_30539.txt
карма: 0

0
файлы: 1code_30539.txt [7.4KB] [137]
Ответов: 8930
Рейтинг: 823
#32: 2013-03-09 16:38:02 ЛС | профиль | цитата
Tad писал(а):
а с помощью DirTools ?
DirTools при копировании той же папки (а там много подпапок) выдаёт разное время: от 7 до 20 секунд, правда схема совсем короткая, не люблю короткие схемы
карма: 19

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#33: 2013-03-09 16:57:55 ЛС | профиль | цитата
Леонид писал(а):
результат проверки на скорость (2500 файлов в папке ~1 Гб общим весом)

Не, вот упертый-то. Нет у тебя отдельных потоков при таком схемопостроении, все выполянется в главном потоке. Ну сколько можно объяснять-то... Само название точки SyncExec говорит само за себя, и снова на те же грабли, уже в который раз
карма: 22

0
Ответов: 824
Рейтинг: 138
#34: 2013-03-09 17:08:20 ЛС | профиль | цитата
Laetar Спасибо.
Получается, что копия схемы не может быть завершена по событию вызванному из себя же?
И это событие должно бить извне?
Об этом в справке ничего не сказано.
Tad, Ваши разъяснения об "недопустимом самоубийстве", перевернули все мое мировидение касательно работы компонента "Динамический контейнер". Если бы не Ваша помощь, я так и остался слеп и глух.
карма: 1

0
Ответов: 8930
Рейтинг: 823
#35: 2013-03-09 17:46:53 ЛС | профиль | цитата
nesco писал(а):
Нет у тебя отдельных потоков
В этой схеме при использовании onExec выпадает ошибка с завершением программы соединял по разному.
карма: 19

0
Ответов: 1536
Рейтинг: 176
#36: 2013-03-10 10:20:32 ЛС | профиль | цитата
sashaoli, вот схема иллюстрирующая многопоточность (так мне думается).
Add(MainForm,9382258,189,119)
{
Width=945
Height=607
}
Add(StyleXP,2891614,189,77)
{
}
Add(Edit,11641370,399,112)
{
Left=140
Top=15
Width=235
ColorSp=-16777215
Text="c:UsersSashaoliDocuments"
ReadOnly=0
}
Add(Button,15167945,245,112)
{
Left=10
Top=15
Width=125
Caption="Папка для анализа"
link(onClick,5279826:doBrowse,[])
}
Add(Browse,5279826,287,112)
{
Title="Select Pack Folder"
NewStyle=0
NewDirButton=1
link(onBrowse,429033:doEvent1,[])
}
Add(FileSearch,12643089,392,161)
{
@Hint=#35:Количество файлов в выбранной папке|
TimeType=1
link(onSearch,6293613:doAdd,[])
link(onEndSearch,5351113:doWork1,[(431,174)(431,202)(368,202)])
link(Dir,11641370:Text,[])
AddHint(-250,6,186,26,@Hint)
}
Add(Hub,429033,336,112)
{
OutCount=3
link(onEvent1,11641370:doText,[])
link(onEvent2,6293613:doClear,[(389,125)(389,153)(438,153)(438,174)])
link(onEvent3,12643089:doSearch,[(382,132)(382,167)])
}
Add(StrList,6293613,588,161)
{
}
Add(Label,8815368,455,252)
{
Left=175
Top=45
}
Add(UpDown,6202415,273,245)
{
Left=150
Top=40
Max=15
Min=1
Position=1
link(onPosition,12850526:doText,[])
}
Add(Edit,12850526,322,245)
{
Left=115
Top=40
Width=35
Text="1"
link(onChange,5351113:doWork2,[])
}
Add(MathParse,6828647,385,245)
{
MathStr="trunc(%2/%1)-1"
ResultType=0
link(onResult,8996694:doEvent1,[])
link(X1,6202415:Position,[(391,236)(377,236)(377,285)(279,285)])
link(X2,12643089:Count,[])
}
Add(Hub,8996694,427,245)
{
link(onEvent1,1684788:doWork1,[])
link(onEvent2,8815368:doText,[])
}
Add(Label,7620334,196,245)
{
Left=15
Top=45
Width=90
Height=17
Caption="Number of threads"
}
Add(InfoTip,2424062,168,217)
{
Info=#33:Расчет количества файлов на поток|
VAlign=2
Width=372
Height=88
}
Add(HubEx,5351113,364,245)
{
link(onEvent,6828647:doCalc,[])
}
Add(ChildScrollBox,1684788,602,245)
{
link(Data1,6293613:Array,[])
}
BEGIN_SDK
Add(EditMulti,15474243,21,21)
{
WorkCount=2
DataCount=1
Width=426
Height=305
link(doWork1,13066821:In,[])
link(doWork2,1037681:doEvent1,[(67,34)(67,118)])
}
Add(ScrollBox,498925,28,175)
{
Left=5
Top=75
Width=924
Height=484
}
Add(ChildPanelEx,11868505,343,196)
{
Mode=1
link(onTimer,14877139:doDeferredEvent,[(382,202)(382,237)(333,237)(333,258)])
link(Data,9729527:Text,[])
}
BEGIN_SDK
Add(EditMultiEx,5075166,21,21)
{
WorkCount=#5:##add|8:##delete|7:##clear|
EventCount=#7:onTimer|
VarCount=#12:##eventIndex|
DataCount=#4:Data|
Width=531
Height=284
Point(##add)
Point(##delete)
Point(##eventIndex)
Point(##clear)
link(##add,9479358:doEvent1,[(32,27)(32,76)])
}
Add(Panel,2732250,133,70)
{
Top=90
Width=897
Height=37
Layout="parent.00"
BorderWidth=0
BevelInner=0
BevelWidth=0
Point(doColor)
}
Add(Random,8194906,91,77)
{
Min=255
Max=10000000
link(onRandom,2732250:doColor,[])
}
Add(Hub,9479358,49,70)
{
OutCount=4
link(onEvent1,7043982:doText,[(81,76)(81,69)])
link(onEvent2,8194906:doRandom,[])
link(onEvent3,1383539:doData,[(81,90)(81,125)])
link(onEvent4,1984961:doWork2,[(74,97)(74,167)])
}
Add(ProgressBar,1465385,392,112)
{
Left=15
Top=4
Width=860
Height=15
Point(doMax)
}
Add(If_else,2186113,420,175)
{
link(onTrue,5075166:onTimer,[(501,181)(501,27)])
link(onFalse,1984961:doWork3,[(500,188)(500,272)(144,272)])
link(Op2,5358354:Var3,[(433,103)])
}
Add(StrList,7043982,203,42)
{
link(Str,5075166:Data,[(209,33)(27,33)])
}
Add(DoData,1383539,210,119)
{
link(onEventData,1465385:doMax,[])
link(Data,5358354:Var2,[])
}
Add(Math,5249674,315,161)
{
Op2=1
ResultType=0
link(onResult,7293476:doEvent1,[])
link(Op1,15543232:Count,[(321,145)(258,145)(258,201)(174,201)])
}
Add(ArrayRW,129709,217,161)
{
link(onRead,6926706:doTimer,[])
link(Array,7043982:Array,[])
}
Add(CounterEx,15543232,168,161)
{
Max=100000
Default=-1
link(onNext,129709:doRead,[])
}
Add(GetDataEx,5358354,210,98)
{
link(Data,7043982:Count,[])
}
Add(Timer,6926706,273,161)
{
Interval=1
Enable=1
AutoStop=2
link(onTimer,5249674:doOperation,[])
}
Add(Hub,7293476,357,161)
{
OutCount=3
link(onEvent1,1465385:doPosition,[(382,167)(382,118)])
link(onEvent2,11201673:doText,[(382,174)(382,223)])
link(onEvent3,2186113:doCompare,[])
}
Add(HubEx,1984961,140,161)
{
link(onEvent,15543232:doNext,[])
}
Add(Label,11201673,392,217)
{
Left=15
Top=21
Transparent=0
link(Text,129709:Item,[(398,208)(223,208)])
}
END_SDK
Add(ToolBarLayout,7168670,245,203)
{
Name="00"
}
Add(DeferredEvent,14877139,343,252)
{
InData=0
Point(Data)
link(onDeferredEvent,14186833:doEvent1,[(393,258)(393,186)(287,186)(287,209)])
link(Data,11868505:##eventIndex,[])
}
Add(Hub,14186833,301,203)
{
link(onEvent1,11868505:##delete,[])
link(onEvent2,12216332:doWork3,[(324,216)(324,243)(228,243)])
}
Add(HubEx,12216332,224,203)
{
link(onEvent,7168670:doResize,[])
}
Add(Hub,12328967,189,119)
{
link(onEvent1,9729527:doAdd,[])
link(onEvent2,12603281:doNext,[])
}
Add(CounterEx,12603281,238,126)
{
@Hint=#48:Счетчик максимального количества файлов в потоке|
Max=500
Default=-1
Point(onThroughMax)
Point(doReset)
Point(doMax)
link(onThroughMax,1033079:doEvent1,[])
AddHint(-88,-83,200,26,@Hint)
}
Add(Hub,1033079,280,133)
{
OutCount=3
link(onEvent1,11868505:##add,[(319,139)(319,202)])
link(onEvent2,9729527:doClear,[(313,146)(313,132)])
link(onEvent3,12603281:doReset,[(309,153)(309,167)(231,167)(231,139)])
}
Add(StrList,9729527,343,119)
{
@Hint=#31:Список файлов для одного потока|19:Для каждого - новый|
AddHint(41,-85,190,26,@Hint)
}
Add(LineBreak,3830947,189,140)
{
@Color=65535
link(Out,12603281:doMax,[])
Primary=[13066821,-105,-119]
}
Add(ArrayEnum,14774319,133,119)
{
link(onItem,12328967:doEvent1,[])
link(onEndEnum,12216332:doWork2,[(179,132)(179,209)])
link(Array,15474243:Data1,[(139,96)(27,96)])
}
Add(Hub,1037681,98,112)
{
link(onEvent1,11868505:##clear,[(333,118)(333,216)])
link(onEvent2,14774319:doEnum,[])
}
END_SDK
Add(Button,10243423,553,252)
{
Left=245
Top=40
Width=130
Caption="Псевдокопировать"
link(onClick,1684788:doWork2,[])
}
Вариант с Timer
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#37: 2013-03-10 11:28:02 ЛС | профиль | цитата
ser_davkin писал(а):
вот схема иллюстрирующая многопоточность

Вот только мультипотоков я там что-то не увидел
карма: 22

0
Ответов: 1536
Рейтинг: 176
#38: 2013-03-10 11:37:11 ЛС | профиль | цитата
nesco, а так:
Add(MainForm,9382258,322,161)
{
Width=945
Height=623
}
Add(StyleXP,2891614,322,119)
{
}
Add(Edit,11641370,532,154)
{
Left=140
Top=15
Width=235
ColorSp=-16777215
Text="c:UsersSashaoliDocuments"
ReadOnly=0
}
Add(Button,15167945,378,154)
{
Left=10
Top=15
Width=125
Caption="Папка для анализа"
link(onClick,5279826:doBrowse,[])
}
Add(Browse,5279826,420,154)
{
Title="Select Pack Folder"
NewStyle=0
NewDirButton=1
link(onBrowse,429033:doEvent1,[])
}
Add(FileSearch,12643089,525,203)
{
@Hint=#35:Количество файлов в выбранной папке|
TimeType=1
link(onSearch,6293613:doAdd,[])
link(onEndSearch,5351113:doWork1,[(564,216)(564,244)(501,244)])
link(Dir,11641370:Text,[])
AddHint(-250,6,186,26,@Hint)
}
Add(Hub,429033,469,154)
{
OutCount=3
link(onEvent1,11641370:doText,[])
link(onEvent2,6293613:doClear,[(522,167)(522,195)(571,195)(571,216)])
link(onEvent3,12643089:doSearch,[(515,174)(515,209)])
}
Add(StrList,6293613,721,203)
{
}
Add(Label,8815368,588,294)
{
Left=175
Top=45
}
Add(UpDown,6202415,406,287)
{
Left=150
Top=40
Max=15
Min=1
Position=1
link(onPosition,12850526:doText,[])
}
Add(Edit,12850526,455,287)
{
Left=115
Top=40
Width=35
Text="1"
link(onChange,5351113:doWork2,[])
}
Add(MathParse,6828647,518,287)
{
MathStr="trunc(%2/%1)-1"
ResultType=0
link(onResult,8996694:doEvent1,[])
link(X1,6202415:Position,[(524,278)(510,278)(510,327)(412,327)])
link(X2,12643089:Count,[])
}
Add(Hub,8996694,560,287)
{
link(onEvent1,13416923:doWork1,[])
link(onEvent2,8815368:doText,[])
}
Add(Label,7620334,329,287)
{
Left=15
Top=45
Width=90
Height=17
Caption="Number of threads"
}
Add(InfoTip,2424062,301,259)
{
Info=#33:Расчет количества файлов на поток|
VAlign=2
Width=372
Height=88
}
Add(HubEx,5351113,497,287)
{
link(onEvent,6828647:doCalc,[])
}
Add(Button,10243423,686,294)
{
Left=245
Top=40
Width=130
Caption="Псевдокопировать"
link(onClick,13416923:doWork2,[])
}
Add(ChildScrollBox,13416923,735,287)
{
link(Data1,6293613:Array,[])
}
BEGIN_SDK
Add(EditMulti,14466623,21,21)
{
WorkCount=2
DataCount=1
Width=426
Height=305
link(doWork1,3688727:In,[])
link(doWork2,16215185:doEvent1,[(67,34)(67,118)])
}
Add(ScrollBox,6602751,28,175)
{
Left=5
Top=75
Width=924
Height=504
}
Add(ChildPanelEx,1971284,343,196)
{
Mode=1
link(onTimer,16575813:doDeferredEvent,[(382,202)(382,237)(333,237)(333,258)])
link(Data,5441648:Text,[])
}
BEGIN_SDK
Add(EditMultiEx,6616729,21,21)
{
WorkCount=#5:##add|8:##delete|7:##clear|
EventCount=#7:onTimer|
VarCount=#12:##eventIndex|
DataCount=#4:Data|
Width=538
Height=284
Point(##add)
Point(##delete)
Point(##clear)
Point(##eventIndex)
link(##add,12993728:doEvent1,[(32,27)(32,76)])
}
Add(Panel,16288839,133,70)
{
Top=90
Width=897
Height=37
Layout="parent.00"
BorderWidth=0
BevelInner=0
BevelWidth=0
Point(doColor)
}
Add(Random,12754515,91,77)
{
Min=1000
Max=10000000
link(onRandom,16288839:doColor,[])
}
Add(Hub,12993728,49,70)
{
OutCount=4
link(onEvent1,9234475:doText,[(81,76)(81,69)])
link(onEvent2,12754515:doRandom,[])
link(onEvent3,7210088:doData,[(81,90)(81,125)])
link(onEvent4,9746016:doWork1,[(74,97)])
}
Add(ProgressBar,1692134,399,112)
{
Left=15
Top=4
Width=860
Height=15
Point(doMax)
}
Add(If_else,14165174,413,168)
{
link(onTrue,6616729:onTimer,[(487,174)(487,27)])
link(onFalse,9746016:doWork3,[(489,181)(489,276)(74,276)])
link(Op2,3304614:Var3,[(426,103)])
}
Add(StrList,9234475,203,42)
{
link(Str,6616729:Data,[(209,33)(27,33)])
}
Add(DoData,7210088,210,119)
{
link(onEventData,1692134:doMax,[])
link(Data,3304614:Var2,[])
}
Add(Math,14145632,322,168)
{
Op2=1
ResultType=0
link(onResult,12328645:doEvent1,[])
link(Op1,3859335:Count,[(328,152)(258,152)(258,201)(174,201)])
}
Add(ArrayRW,10186251,217,161)
{
link(onRead,261580:doStart,[])
link(Array,9234475:Array,[])
}
Add(CounterEx,3859335,168,161)
{
Max=100000
Default=-1
link(onNext,10186251:doRead,[])
}
Add(GetDataEx,3304614,210,98)
{
link(Data,9234475:Count,[])
}
Add(Hub,12328645,364,168)
{
OutCount=3
link(onEvent1,14165174:doCompare,[])
link(onEvent2,6602740:doText,[(396,181)(396,237)])
link(onEvent3,1692134:doPosition,[(389,188)(389,118)])
}
Add(Label,6602740,406,231)
{
Left=15
Top=21
Transparent=0
link(Text,10186251:Item,[(412,215)(223,215)])
}
Add(HubEx,9746016,70,161)
{
link(onEvent,3859335:doNext,[])
}
Add(Thread,261580,273,161)
{
Delay=5
link(onSyncExec,14145632:doOperation,[])
}
END_SDK
Add(ToolBarLayout,849604,245,203)
{
Name="00"
AddMode=1
}
Add(DeferredEvent,16575813,343,252)
{
InData=0
Point(Data)
link(onDeferredEvent,5964817:doEvent1,[(393,258)(393,186)(287,186)(287,209)])
link(Data,1971284:##eventIndex,[])
}
Add(Hub,5964817,301,203)
{
link(onEvent1,1971284:##delete,[])
link(onEvent2,15983965:doWork3,[(324,216)(324,243)(228,243)])
}
Add(HubEx,15983965,224,203)
{
link(onEvent,849604:doResize,[])
}
Add(Hub,12830845,189,119)
{
link(onEvent1,5441648:doAdd,[])
link(onEvent2,5846866:doNext,[])
}
Add(CounterEx,5846866,238,126)
{
@Hint=#48:Счетчик максимального количества файлов в потоке|
Max=500
Default=-1
Point(onThroughMax)
Point(doReset)
Point(doMax)
Point(Max)
link(onThroughMax,1650046:doEvent1,[])
AddHint(-88,-83,200,26,@Hint)
}
Add(Hub,1650046,280,133)
{
OutCount=3
link(onEvent1,1971284:##add,[(319,139)(319,202)])
link(onEvent2,5441648:doClear,[(313,146)(313,132)])
link(onEvent3,5846866:doReset,[(309,153)(309,167)(231,167)(231,139)])
}
Add(StrList,5441648,343,119)
{
@Hint=#31:Список файлов для одного потока|19:Для каждого - новый|
AddHint(41,-85,190,26,@Hint)
}
Add(LineBreak,11590542,189,140)
{
@Color=65535
link(Out,5846866:doMax,[])
Primary=[3688727,-105,-119]
}
Add(ArrayEnum,2802314,133,119)
{
link(onItem,12830845:doEvent1,[])
link(onEndEnum,15983965:doWork2,[(179,132)(179,209)])
link(Array,14466623:Data1,[(139,96)(27,96)])
}
Add(Hub,16215185,91,112)
{
link(onEvent1,1971284:##clear,[(333,118)(333,216)])
link(onEvent2,2802314:doEnum,[])
}
END_SDK
Вариант с Thread
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#39: 2013-03-10 12:00:37 ЛС | профиль | цитата
ser_davkin писал(а):
а так




Ну сколько можно... Ну не работает поток на точке onSyncExec.
onSyncExec выдается в очереди сообщений главного потока. Мультипоточники, млин
------------ Дoбавленo в 12.00:
Вот для кого я это писал

nesco писал(а):
Чтобы синхронизироваться с очередью сообщений приложения и существует событие onSyncExec. И если таймер дополнительного потока выставил итерацию на точке onExec, то на точке onSyncExec событие появится только тогда, когда закончится вся цепь событий точки onExec, управление будет передано системе, и очередь дойдет до обслуживания очереди сообщений приложения. Все это говорит о том, что событие onSyncExec выполняется синхронно с очередью сообщений приложения, тк обрабатывается именно в этой очереди

карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#40: 2013-03-10 13:49:18 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-09 23:38:59
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#41: 2013-03-10 14:58:53 ЛС | профиль | цитата
г. ость писал(а):
Для Леонид-а (форум так подумал)

Да уже не только для Леонид-а, уже для всех -- Чего не стоит делать...(советы)
карма: 22

0
Ответов: 8930
Рейтинг: 823
#42: 2013-03-10 15:36:07 ЛС | профиль | цитата
nesco писал(а):
Не, вот упертый-то

Прошу меня реабилитировать! Выкладывал схемку для загрузки своего процессора на 100%. Вот и картинка:
МногоПоточнаяНагрузка100.jpg
карма: 19

0
файлы: 1МногоПоточнаяНагрузка100.jpg [71.1KB] [241]
Разработчик
Ответов: 26164
Рейтинг: 2127
#43: 2013-03-10 15:58:20 ЛС | профиль | цитата
Леонид писал(а):
Выкладывал схемку для загрузки своего процессора на 100%

А сколько потоков приложения показывает диспетчер
Поди, там еще и Sleep в 0 установлен
карма: 22

0
Ответов: 8930
Рейтинг: 823
#44: 2013-03-10 16:28:15 ЛС | профиль | цитата
nesco, Sleep, конечно, в 0, иначе загрузки не будет
Потоки в диспетчере меняются, то 730, то 750 Но при нажатии кнопки и запуске ветки вырастает на 1. Отдельно по приложениям потоки не знаю где смотреть
карма: 19

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#45: 2013-03-10 16:52:20 ЛС | профиль | цитата
Леонид писал(а):
Отдельно по приложениям потоки не знаю где смотреть

В процессах, но надо включить "Счетчик потоков" в "Выбрать столбцы..."
карма: 22

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