Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#91: 2020-01-14 10:34:07 ЛС | профиль | цитата
Сдуреть не встать.

Оказывается, мы вопросы кольцевания обсуждали еще в августе месяце.
В этом топике ((не поверите - перечитал топик с самого начала)).

Все. У меня текст кончился

Редактировалось 1 раз(а), последний 2020-01-14 10:35:07
карма: 9

1
Голосовали:Tad
Ответов: 4308
Рейтинг: 670
#92: 2020-01-14 16:53:11 ЛС | профиль | цитата
Ещё и я свои 5 копеек вставлю.
Igor08 писал(а):
Если у меня программа вылетает при кольцевании с ошибкой c0000005, наверно тогда переполняется стек вызовов функций или теряется связь с данными? Возможно этот стек как-то очистить?
Кольцевание НЕЛЬЗЯ использовать. Точка. Тогда такой ошибки не будет.
Igor08 писал(а):
Такая ошибка появляется, если не использовать DeferredEvent. С этим элементом программа работает до определенного момента, потом не выполняет расчеты до конца.
По причине вышеприведенного DeferredEvent не является решением. Кроме того, DeferredEvent может пропускать события. Например, ты вызвал его 100 раз, а событие произойдёт 50 раз.
Igor08 писал(а):
А после hub они выполняются почти параллельно, одновременно можно сказать? Или пока по одной ветки все не выполнится после hub, другая выполнятся не будет?
Именно так. Если к какому-то событию (правой точке) хаба подключена цепочка компонентов (метод-событие-метод-событие-метод), то следующее событие хаба не произойдёт, пока все эти точки не отработают по очереди слева направо. Более того, в этот момент (параллельно) никакие другие события (горизонтальные связи) не работают, в том числе DeferredEvent, Timer (кроме MMTimer, Thread и некоторых других компонентов). Сам хаб активируется линией, входящей в него слева. Она тоже не завершится, пока хаб не отработает полностью. Так работают и другие компоненты, в которых событие (правая точка) является результатом вызова метода (левой точки) этого же компонента (смотреть описание методов и событий - там указывается когда происходит событие).

Igor08 писал(а):
Надо чтобы в программе много раз выполнялись одни и те же элементы.
"Много раз" - это сколько?
Если есть ответ "сколько" в виде числа - значит используется компонент For вкладки "Логика". Если ответа "сколько" нету, то должен быть ответ "а когда следует прекратить повторять?". В этом случае используется компонент Repeat с проверкой условия в нём самом, либо условие ставится "1=1" ("повторять бесконечно"), а проверка условий для прекращения повтора делается в самом событии компонента с вызовом doBreak doStop для прекращения повтора.
Если твоя задача, условно, "электронные часы", когда просто нужно с каким-то интервалом повторять некоторое действие - используй компонент Timer. Если нужно остановить таймер - опять же, определись при каком условии он должен остановиться.

Итак, у тебя, вероянто, наличествует логика "если произошло то и то (например, случилась ошибка) - надо повторить операцию". Что ты и решил кольцеванием. Это, как я понимаю, ближе к мышлению в бытовой жизни.
Ты должен переделать мышление: "повторять нужное мне действие до тех пор, пока не произойдёт то и это". И использовать для этого компонент Repeat с условием "1=1", проверять условие после каждого повтора (или перед) и вызвать doBreak doStop, когда произойдёт то что нужно.
Попробую подытожить:
1) Неправильная логика: выполнить действие -> проверить условие -> повторить действие
2) Правильная логика: циклично выполнять действие -> проверить условие -> прекратить повтор

Редактировалось 16 раз(а), последний 2020-01-15 11:47:42
карма: 23

0
Ответов: 44
Рейтинг: 0
#93: 2020-01-14 19:58:10 ЛС | профиль | цитата
А если программу разбить на dll библиотеки и вызывать их в основной программе, так будет работать? Тоже кольцевание получится.

Редактировалось 1 раз(а), последний 2020-01-14 20:01:02
карма: 0

0
Ответов: 161
Рейтинг: 5
#94: 2020-01-14 20:05:29 ЛС | профиль | цитата
Igor08 писал(а):
А если программу разбить на dll библиотеки и вызывать их в основной программе

WHAT? ЧТО ТЫ ДЕЛАЕШЬ?
Igor08 писал(а):
Тоже кольцевание получится.

По сути dll - просто кусок программы в двоичном формате , который она может выгружать и загружать в память. Он работает по тем-же принципам, что и программа .
ПОЖАЛУЙСТА ПОЙМИТЕ, ЧТО
Netspirit писал(а):
Кольцевание НЕЛЬЗЯ использовать. Точка. Тогда такой ошибки не будет.
Netspirit писал(а):
используйте компонент Repeat с проверкой условия в нём самом


Зачем вы кидаете под ноги грабли, а затем ходите по ним? ЗАЧЕМ?

Редактировалось 2 раз(а), последний 2020-01-14 20:06:37
карма: 0
Я ухожу с Хиасима в Delphi
0
Ответов: 44
Рейтинг: 0
#95: 2020-01-14 20:09:33 ЛС | профиль | цитата
Я просто спросил будет так программа работать или нет
карма: 0

0
Ответов: 161
Рейтинг: 5
#96: 2020-01-14 20:17:29 ЛС | профиль | цитата
ВОТ! СРАВНИ КАК У ТЕБЯ, И КАК ДОЛЖНО БЫТЬ БЕЗ БАГОВ!
P.S: красные - не обязательные элементы
зелёные - ЧТО ТЕБЕ НУЖНО ПОНЯТЬ!
Add(StrList,6050407,266,70)
{
@Color=65280
FileName=""
AddType=0
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|20:---ВОТ И ВСЁ!!!!----|
Point(String)
Point(doReplace)
}
Add(Button,14269168,224,161)
{
@Hint=#13:Кнопка расчет|
@Color=65535
Left=370
Top=520
Width=100
Height=30
Align=0
Font=[Times New Roman,14,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name="Расчет"
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
Caption="Расчет"
Data=Null()
Flat=1
DefaultBtn=1
RespondToEnter=1
link(onClick,14596855:doEvent1,[])
AddHint(-106,67,89,13,@Hint)
}
Add(Label,15141331,182,161)
{
@Color=255
Left=30
Top=50
Width=235
Height=25
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Label"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
link(Text,10649860:Var1,[(188,127)])
}
Add(ArrayRW,16234823,371,161)
{
@Hint=#15:Перебор массива|
@Color=65280
Index=Null()
link(onRead,3177546:doNext,[])
link(Array,6050407:Array,[(377,124)(286,124)])
link(Index,14105776:Position,[(384,149)(335,149)(335,205)(300,205)])
AddHint(32,84,106,13,@Hint)
}
Add(MainForm,8908701,77,147)
{
@Color=65535
Left=0
Top=0
Width=823
Height=601
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
AlphaBlendValue=255
Caption="Form"
BorderStyle=2
WindowsState=0
Icon=[]
TaskBar=0
DragForm=1
TransparentColor=16777215
Picture=[]
SavePosName=""
MouseCapture=1
ClientSize=1
Position=0
ShiftLeft=0
ShiftTop=0
OffsetShift=1
TransparentManager="(empty)"
FormFastening="(empty)"
link(onCreate,15141331:doText,[])
}
Add(For,14105776,294,161)
{
@Hint=#4:Цикл|
@Color=65280
Start=0
End=0
Step=1
IncludeEnd=0
InData=1
onBreakEnable=1
link(onEvent,16234823:doRead,[])
link(End,10649860:Var3,[(307,141)])
AddHint(62,101,41,13,@Hint)
}
Add(GetDataEx,10649860,273,122)
{
Angle=0
link(Data,6050407:Count,[])
}
Add(Label,16414058,212,70)
{
@Color=255
Left=30
Top=10
Width=235
Height=33
Align=0
Color=-16777201
Font=[Comic Sans MS,16,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="КОЛИЧЕСТВО СТРОК :"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(Label,9266491,321,70)
{
@Color=255
Left=320
Top=10
Width=451
Height=33
Align=0
Color=-16777201
Font=[Comic Sans MS,16,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Результат подсчитанного количества строк :"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(Label,15021429,484,161)
{
@Color=255
Left=395
Top=55
Width=235
Height=25
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Label"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(CounterEx,3177546,434,161)
{
@Hint=#17:подсчёт количетва|
@Color=255
Min=0
Max=10000
Step=1
Direct=0
Default=0
Point(doReset)
link(onNext,15021429:doText,[])
AddHint(19,53,110,13,@Hint)
}
Add(Hub,14596855,261,161)
{
InCount=1
OutCount=2
link(onEvent1,3177546:doReset,[(283,167)(283,214)(417,214)(417,174)])
link(onEvent2,14105776:doFor,[(287,174)(287,167)])
}

Прользуйся на здоровье !

--- Добавлено в 2020-01-14 20:22:07

Igor08 писал(а):
Я просто спросил будет так программа работать или нет

пример выше смотри.

--- Добавлено в 2020-01-14 20:33:54

Так короче :

Add(StrList,2577132,210,378)
{
@Color=65280
FileName=""
AddType=0
Strings=#1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|20:---ВОТ И ВСЁ!!!!----|
}
Add(Button,6124441,126,455)
{
@Hint=#13:Кнопка расчет|
@Color=65535
Left=275
Top=120
Width=100
Height=30
Align=0
Font=[Times New Roman,14,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name="Расчет"
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
Caption="Расчет"
Data=Null()
Flat=1
DefaultBtn=1
RespondToEnter=1
link(onClick,2106675:doEvent1,[])
AddHint(-106,67,89,13,@Hint)
}
Add(Label,10056561,168,420)
{
@Color=255
Left=30
Top=50
Width=235
Height=25
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Label"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
link(Text,2577132:Count,[(174,415)(223,415)])
}
Add(Label,771199,121,378)
{
@Color=255
Left=30
Top=10
Width=235
Height=33
Align=0
Color=-16777201
Font=[Comic Sans MS,16,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="КОЛИЧЕСТВО СТРОК :"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(Label,16302455,167,378)
{
@Color=255
Left=320
Top=10
Width=451
Height=33
Align=0
Color=-16777201
Font=[Comic Sans MS,16,0,0,204]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Результат подсчитанного количества строк :"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(Label,9524915,295,462)
{
@Color=255
Left=395
Top=55
Width=235
Height=25
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
ModeSp=0
SizeSp=4
ColorSp=-16777201
MinOwn=0
MinRest=0
Transparent=1
Caption="Label"
AutoSize=0
Alignment=0
ColorHover=0
Underline=1
CaptionOnClick=1
}
Add(CounterEx,4589267,252,462)
{
@Hint=#17:подсчёт количетва|
@Color=255
Min=0
Max=10000
Step=1
Direct=0
Default=0
Point(doReset)
link(onNext,9524915:doText,[])
AddHint(19,53,110,13,@Hint)
}
Add(Hub,2106675,177,455)
{
InCount=1
OutCount=2
link(onEvent1,4589267:doReset,[(199,461)(199,534)(242,534)(242,475)])
link(onEvent2,810789:doEnum,[])
}
Add(MainForm,7631360,126,420)
{
Left=0
Top=0
Width=794
Height=203
Align=0
Color=-16777201
Font=[MS Sans Serif,8,0,0,1]
ParentFont=1
Visible=0
Enabled=0
Cursor=0
KeyPreview=0
TabOrder=0
Ctl3D=1
WinStyle=0
Name=""
Hint=""
HintManager="(empty)"
Layout="(empty)"
WidthScale=0
HeightScale=0
AlphaBlendValue=255
Caption="Form"
BorderStyle=2
WindowsState=0
Icon=[]
TaskBar=0
DragForm=1
TransparentColor=16777215
Picture=[]
SavePosName=""
MouseCapture=1
ClientSize=1
Position=0
ShiftLeft=0
ShiftTop=0
OffsetShift=1
TransparentManager="(empty)"
FormFastening="(empty)"
link(onCreate,10056561:doText,[(163,440)(163,426)])
}
Add(ArrayEnum,810789,206,462)
{
@Color=65280
Type=0
onBreakEnable=1
link(onItem,4589267:doNext,[])
link(Array,2577132:Array,[(212,425)(230,425)])
}


--- Добавлено в 2020-01-14 20:35:43

А теперь разъясните хоть что-нибудь про второй вариант схемы, которую вы выложили ( я ничего не понял в той схеме )

Редактировалось 5 раз(а), последний 2020-01-14 20:35:43
карма: 0
Я ухожу с Хиасима в Delphi
0
Ответов: 44
Рейтинг: 0
#97: 2020-01-14 20:47:34 ЛС | профиль | цитата
Я их приводил так просто для примера, схемы с кольцеванием.
карма: 0

0
Ответов: 161
Рейтинг: 5
#98: 2020-01-14 21:34:46 ЛС | профиль | цитата
Но его лучше не использовать Кольцевание - ЗЛО!
карма: 0
Я ухожу с Хиасима в Delphi
0
Ответов: 9906
Рейтинг: 351
#99: 2020-01-15 00:04:19 ЛС | профиль | цитата
Netspirit писал(а):
и вызвать doBreak

Сам ты doBreak. Два раза



Редактировалось 1 раз(а), последний 2020-01-15 00:05:30
карма: 9

0
Ответов: 44
Рейтинг: 0
#100: 2020-01-15 04:39:22 ЛС | профиль | цитата
Netspirit, спасибо за подсказку, что бесконечный цикл repeat с условием, это замена кольцеванию.
карма: 0

0
Ответов: 4308
Рейтинг: 670
#101: 2020-01-15 11:35:59 ЛС | профиль | цитата
Igor08 писал(а):
Netspirit, спасибо за подсказку, что бесконечный цикл repeat с условием, это замена кольцеванию.
Ну, слава Богу! К 7-й странице разобрались.

Galkov писал(а):
Сам ты doBreak
Согласен
Имелось в виду doStop.
карма: 23

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