Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2009-08-27 16:24:20 ЛС | профиль | цитата
Приятного времени суток господа!

Замучался я с потоками бороться, ну не понимаю я его и как он работает

Помогите разобраться куда надо воткнуть компонент "Поток" что бы все действия выполнялись синхронно
Ато лог выдается не в процессе работы программы а после того как все закончиться.
Еще планирую воткнуть ПрогрессБар, думаю что ему тоже понадобиться поток
Заранее всем спасибо
code_14714.txt
карма: 1

0
файлы: 1code_14714.txt [7.5KB] [166]
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2009-08-27 16:33:58 ЛС | профиль | цитата
Запускать не пробовал, но вот самый простой вариант: code_14715.txt
карма: 10
0
файлы: 1code_14715.txt [7.2KB] [181]
Ответов: 817
Рейтинг: 52
#3: 2009-08-27 16:40:12 ЛС | профиль | цитата
Assasin писал(а):
Запускать не пробовал, но вот самый простой вариант: code_14715.txt

Хм......
Дествительно работает !
Но почему сюда воткнули этот компонент?...
Попробую ответить сам.
Получается два цикла работают в одном потоке, а сама программа в другом.
Если я не прав поправьте меня
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#4: 2009-08-27 16:40:51 ЛС | профиль | цитата
Именно так
------------ Дoбавленo в 16.41:
Перерисовка компонента Memo идет в отдельном(созданном) потоке, а "вывод на форму" происходит в основном, вот вам и лог
карма: 10
0
Ответов: 817
Рейтинг: 52
#5: 2009-08-27 16:43:43 ЛС | профиль | цитата
Тогда я начинаю понимать его логику
А зачем в этом компоненте нужна задержка и как она влияет на поток если задержка 0
Если 0, то я предпологаю что никакого параллельного потока не будет

Перерисовка компонента Memo идет в отдельном(созданном) потоке, а "вывод на форму" происходит в основном, вот вам и лог

Т.е. для окошка лога лучше использовать Memo ?
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#6: 2009-08-27 16:47:54 ЛС | профиль | цитата
-= DriveR =- писал(а):
А зачем в этом компоненте нужна задержка и как она влияет на поток если задержка 0
Если 0, то я предпологаю что никакого параллельного потока не будет

Почитай про задержку здесь Thread -> Примечания
= DriveR =- писал(а):
Т.е. для окошка лога лучше использовать Memo ?

Без разницы, это я так к слову сказал
карма: 10
0
Разработчик
Ответов: 26156
Рейтинг: 2127
#7: 2009-08-27 17:02:36 ЛС | профиль | цитата
Может я и не совсем догнал всего, но именно представленную схему я бы сильно упростил


Add(MainForm,560010,707,231)
{
Width=790
Height=484
Position=1
}
Add(Label,3215629,672,63)
{
Left=5
Top=5
Width=99
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Что копировать"
}
Add(Button,2744324,357,98)
{
Left=200
Top=30
Width=65
Caption="Добавить"
link(onClick,14442517:doExecute,[])
}
Add(ListBox,8072794,455,98)
{
Left=5
Top=20
Width=195
Height=70
DataType=1
Point(Index)
}
Add(Button,4986779,357,189)
{
Left=200
Top=55
Width=65
Caption="Удалить"
link(onClick,16755335:doData,[])
}
Add(Label,7658947,707,98)
{
Left=5
Top=145
Width=225
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Компьютеры на которые копировать"
}
Add(ListBox,9921536,210,154)
{
Left=5
Top=180
Width=195
Height=240
Point(Index)
link(Str,11757766:Var2,[])
}
Add(Button,15538294,98,105)
{
Left=200
Top=160
Width=65
Caption="Добавить"
link(onClick,12034870:doWork1,[])
}
Add(Button,16652568,98,245)
{
Left=200
Top=235
Width=65
Caption="Удалить"
link(onClick,5802971:doData,[])
}
Add(Button,16568293,98,182)
{
Left=200
Top=190
Width=65
Caption="Из файла"
link(onClick,7303991:doExecute,[])
}
Add(Label,488473,707,63)
{
Left=5
Top=100
Width=145
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Папка куда копировать"
}
Add(ListBox,5034088,679,392)
{
Left=285
Top=20
Width=485
Height=400
Font=[Lucida Console,8,0,0,204]
}
Add(Button,15152035,126,357)
{
Left=205
Top=320
Width=75
Height=75
Caption="Начать"
link(onClick,1055874:doStart,[])
}
Add(Button,11674284,707,154)
{
Left=205
Top=400
Width=75
Caption="Остановить"
}
Add(StyleXP,1661005,630,63)
{
}
Add(Button,5499061,98,140)
{
Left=200
Top=260
Width=65
Caption="Очистить"
link(onClick,9921536:doClear,[(173,146)(173,167)])
}
Add(ODialog,14442517,399,98)
{
Title="Открыть файл"
Select=1
link(onExecute,8072794:doAdd,[])
}
Add(Button,5783447,707,189)
{
Left=105
Top=5
Width=15
Height=15
Caption="?"
}
Add(Button,15350277,672,154)
{
Left=150
Top=100
Width=15
Height=15
Caption="?"
}
Add(Button,1364626,672,189)
{
Left=230
Top=145
Width=15
Height=15
Caption="?"
}
Add(Edit,13256051,399,315)
{
Left=5
Top=115
Width=260
Text="admin$"
}
Add(Label,16698835,672,98)
{
Left=285
Top=5
Width=26
Height=17
Font=[MS Sans Serif,8,1,0,1]
Caption="Лог"
}
Add(DoData,16755335,476,189)
{
link(onEventData,8072794:doDelete,[(519,195)(519,229)(443,229)(443,118)])
link(Data,8072794:Index,[])
}
Add(Edit,12339249,210,49)
{
Left=5
Top=160
Width=195
Text=""
Point(doSelectAll)
Point(doSelectText)
}
Add(ODialog,7303991,147,182)
{
Filter="TXT|*.txt"
Title="Открыть файл"
FileName="*.txt"
link(onExecute,9921536:doLoad,[])
}
Add(DoData,5802971,231,245)
{
link(onEventData,9921536:doDelete,[(274,251)(274,285)(197,285)(197,174)])
link(Data,9921536:Index,[])
}
Add(GetDataEx,11757766,210,91)
{
link(Data,12339249:Text,[])
}
Add(FormatStr,3289641,392,357)
{
DataCount=3
Mask="\\%1%2%3"
Point(FString)
link(onFString,3296195:doPing,[])
link(Str1,11049108:Var2,[])
link(Str2,13256051:Text,[])
}
Add(GProgressBar,6816360,609,231)
{
Left=5
Top=425
Width=525
Ctl3D=0
}
Add(FilePartElm,11778256,343,357)
{
link(onPart,3289641:doString,[])
}
Add(FileTools,11005251,518,350)
{
link(onEnd,1976835:doData,[])
link(FileName,4436890:Item,[(524,338)(489,338)(489,406)(300,406)])
link(NewFileName,3289641:FString,[(531,333)(483,333)(483,401)(398,401)])
}
Add(Ping,3296195,441,357)
{
TimeOut=100
link(onFind,11005251:doCopy,[])
link(onFailed,4192837:doData,[(500,370)(500,398)])
link(Name,14038085:Var2,[])
}
Add(MultiElement,12034870,147,105)
{
link(onEvent1,12339249:doSelectAll,[(190,111)(190,69)])
link(onEvent2,12339249:doSelectText,[(198,118)(198,76)])
link(onEvent3,9921536:doAdd,[(198,125)(198,160)])
link(Data1,11757766:Var1,[(153,96)])
}
BEGIN_SDK
Add(EditMulti,2660069,21,21)
{
EventCount=3
WorkCount=1
DataCount=1
link(doWork1,9958937:doCompare,[(49,27)(49,104)])
}
Add(If_else,9958937,77,98)
{
link(onTrue,1066957:doMessage,[(139,104)(139,62)])
link(onFalse,8084257:doEvent1,[])
link(Op1,2660069:Data1,[(83,60)(27,60)])
}
Add(Message,1066957,168,56)
{
Message="Нечего добавлять.
Введите имя компьютера."
Caption="Нечего добавлять"
Icon=3
}
Add(Hub,8084257,119,105)
{
OutCount=3
link(onEvent1,2660069:onEvent3,[(227,111)(227,41)])
link(onEvent2,2660069:onEvent1,[(227,118)(227,27)])
link(onEvent3,2660069:onEvent2,[(227,125)(227,34)])
}
END_SDK
Add(LineBreak,15946886,224,217)
{
Caption="ArrComp"
Type=1
link(Data,9921536:Array,[])
Primary=[5155904,0,105]
}
Add(LineBreak,15223207,469,161)
{
Caption="ArrComp2"
Type=1
link(Data,8072794:Array,[])
Primary=[9959309,-175,161]
}
Add(Thread,1055874,175,357)
{
Delay=0
FastStop=0
link(onExec,1543758:doEnum,[])
}
Add(ArrayEnum,1543758,224,357)
{
link(onItem,4436890:doEnum,[])
link(Array,5155904:Var,[])
}
Add(ArrayEnum,4436890,294,357)
{
link(onItem,11778256:doPart,[])
link(Array,9959309:Var,[])
}
Add(FormatStr,15559396,630,392)
{
link(onFString,5034088:doAdd,[])
link(Str1,14038085:Var3,[(636,307)])
}
Add(DoData,1976835,567,350)
{
Data=String(- Ok)
link(onEventData,38113:doWork1,[(613,356)])
}
Add(DoData,4192837,567,392)
{
Data=String(- Err)
link(onEventData,38113:doWork2,[])
}
Add(HubEx,38113,609,392)
{
link(onEvent,15559396:doString,[])
}
Add(GetDataEx,11049108,392,302)
{
Angle=3
link(Data,1543758:Item,[(282,307)(282,406)(230,406)])
}
Add(GetDataEx,14038085,441,302)
{
Angle=3
link(Data,11049108:Var3,[])
}


Assasin писал(а):
Почитай про задержку здесь

Можно не совсем догнать, пока не столкнешься. Задержка в ноль для одноразового потока, после загрузки и отрисовки формы будет означать "немедленный" запуск потока. В описании сказано про циклический поток, когда итерации происходят через определенный промежуток времени, там ноль ставить нежелательно, так как запущенный поток не будет приостанавливаться командой sleep, а будет пытаться постоянно выдавать события, не оставляя времени на синхронные операции, что не очень благотворно сказывается на загрузку процессора и на отработку сообщений главного потока в частности.
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#8: 2009-08-27 17:07:28 ЛС | профиль | цитата
nesco писал(а):
Может я и не совсем догнал всего, но именно представленную схему я бы сильно упростил

Я тоже хотел сказать об этом, но подумал, что это только набросок, судя по данным из первого поста и схемы(там много кнопок еще не работают)
карма: 10
0
Ответов: 817
Рейтинг: 52
#9: 2009-08-27 17:39:36 ЛС | профиль | цитата
nesco писал(а):
Может я и не совсем догнал всего, но именно представленную схему я бы сильно упростил

Во голова
Действительно попроще и смотриться красивее
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#10: 2009-08-27 19:10:18 ЛС | профиль | цитата
nesco, думаем почти одинаково, но выложу и свой вариант.
code_14720.txt

-= DriveR =-, все ж таки список получателей я бы организовал по другому.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_14720.txt [6.6KB] [170]
Разработчик
Ответов: 26156
Рейтинг: 2127
#11: 2009-08-27 19:21:14 ЛС | профиль | цитата
Tad писал(а):
думаем почти одинаково

Если не совсем одинаково, только развитие твоя схема получила дальше, а я не стал с эти морочиться, нехай чел тоже головой пошурупит
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#12: 2009-08-27 19:32:19 ЛС | профиль | цитата
-= DriveR =- писал(а):
Еще планирую воткнуть ПрогрессБар
Вот я и воткнул
-= DriveR =-, я не знаю как у тебя организована работа с получателями.
Если список постоянный, то можно сначала создать список АКТИВНЫХ и потом, применив MultiSelect, отметить нужных и перебирать уже их.
------------ Дoбавленo в 21.08:
Да, и если ведешь лог, то обычно пишут ещё и время начала и конца связи.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)