Page 1 of 1
Трабла с UO.Exec('terminate ...')
Posted: 2005-07-04 07:34:25
by Don SpiL
Собсна сабж.К примеру если есть такой саб...
Code: Select all
sub main()
repeat
<набор команд и условий>
fgonext() - вызов процедуры (естественно пока она не окончиться то скрипт дальше не идет)
until false
end sub
sub control()
while not uo.dead()
if uo.life<100 then
uo.exec('terminate main')
wend
end if
Так вот если в определенный момент времени условие в сабе control становиться истинным то саб main теминейтиться! пральна ? ДА! - НО!!
Если в этот момент процедура main вызвалал процедуру fgonext() и та в свою очередь еще не закончилась то терминейт main НЕ происходит!!
Хелпните парни =( мож я че торможу ?
Posted: 2005-07-04 09:48:13
by 666Man666
Поставь, поможет )
Code: Select all
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
Posted: 2005-07-04 10:05:50
by Don SpiL
666Man666 wrote:Поставь, поможет )
Code: Select all
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
Wait(200)
UO.Exec('terminate all')
=( В том то все и дело что мне ненада тушить все!! мне надо тушить только определенные сабы! а вот иногда не пашет.
2Yoko - думаю проблема глобальна и требует твоей помощи! Я вот думаю как мне описать чтоб саб не выполнялся пока не потухнет другой (заданный саб).
Posted: 2005-07-04 10:49:41
by 666Man666
Ну поставь не ALL а свой MAIN
Code: Select all
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
а чтобы не запускался другой саб если не потухнит этот, ставь глобалки...
Code: Select all
If UO.GetGlobal('Check')<>'on' Then
UO.SetGlobal('Check','on')
*Код*
UO.SetGlobal('Check','off')
Else
UO.Print("Wait")
End If
Posted: 2005-07-04 11:01:06
by Askaneli
Я не понял конечно почему не тушится
Но раз уж не тушится, то можно через те же самые глобальные переменные и тушить процедуру.
Posted: 2005-07-04 11:02:34
by Don SpiL
666Man666 wrote:Ну поставь не ALL а свой MAIN
Code: Select all
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
а чтобы не запускался другой саб если не потухнит этот, ставь глобалки...
Code: Select all
If UO.GetGlobal('Check')<>'on' Then
UO.SetGlobal('Check','on')
*Код*
UO.SetGlobal('Check','off')
Else
UO.Print("Wait")
End If
Спасиб всем!! Первый варинт болеее надежнее второго! хотя второй тоже норм но не дает гарнтии того что тот саб всетки потухнет.
Я решил траблу малость по другому.Хоть саб fgonext() и не виден как запущенный всерно делаю его терминейт перед терминейтом main и... алилуйя заработало =))
Еще раз всем СПС!!!
Posted: 2005-07-04 11:08:19
by Don SpiL
Askaneli wrote:Я не понял конечно почему не тушится
Но раз уж не тушится, то можно через те же самые глобальные переменные и тушить процедуру.
Нукс расскажи мне ламеру =)))) как можно через те-же глобальные переменные потушить саб ?Ну к примеру при старте того саба что нуно потушить он задает гл.переменную=on в начале и off в конце саба! пральна?,так ты хотел устроить?
А дальше ?ну проверим мы гл.переменную и увидим что она "on" пытаемся ее терминейт! а до какого события будем слать терминейт сабу main, как ты узнаешь что она действительно в дауне ?!
Posted: 2005-07-04 11:10:54
by flake
цикл с вейтов, пока не измениться глобальная переменная.
Posted: 2005-07-04 11:58:45
by Don SpiL
flake wrote:цикл с вейтов, пока не измениться глобальная переменная.
Хорошо! к примеру после второго теминейта саб уйдет в даун и как теперь понять что он в дауне? - ведь сетглобал офф стоит в том сабе который мы собственно и тушим!, а если мы его потушили то собсна и сетглобал не пройдет и останеться = on! или ставить фор на на штук 10 циклов проверки после чего считать саб потушенным:cry:?
И еще нюанс! cаб main у меня циклический !!

Posted: 2005-07-04 12:05:16
by Askaneli
Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.
Posted: 2005-07-04 12:12:06
by Don SpiL
Askaneli wrote:Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.
Ну ты пойми!! яж не выдумываю! у мя тоже все именно так и построено!! да и вапче у всех норм кодеров так и должно быть =). Но сам факт есть факт !! причем я не говорю что она всегда не тухнет, но 50/50 потухнет или нет! И всетаки мне пришлость вписать в терминейт именно те сабы которые были вызваны мейном а потом только тушить сам мейн, и вот тогда все сто процентно!!
И еще чтоб не путать народ у меня основной саб не main а control .
Posted: 2005-07-04 12:30:32
by Wahoocka
А разве нельзя вставить это проверку
в твою вызываемую функцию "fgonext()" ??
если условие совпадет, то там уж сам решай что тебе нужно
или
Posted: 2005-07-04 12:33:26
by Askaneli
Don SpiL wrote:Askaneli wrote:Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.
Ну ты пойми!! яж не выдумываю! у мя тоже все именно так и построено!! да и вапче у всех норм кодеров так и должно быть =). Но сам факт есть факт !! причем я не говорю что она всегда не тухнет, но 50/50 потухнет или нет! И всетаки мне пришлость вписать в терминейт именно те сабы которые были вызваны мейном а потом только тушить сам мейн, и вот тогда все сто процентно!!
И еще чтоб не путать народ у меня основной саб не main а control .
Я те говорю что тухнет в 100% случаев
Posted: 2005-07-05 05:25:32
by Don SpiL
Ладно парни всем спасибо!! Те способы что все мы тут изложили это изврат!! не стабильный изврат! Я надеялся что у Yoko есть какая нить функция для проверки на живость саба

но всерно парни всем СПС
З.Ы. Самый реальный форум по кодингу для УО. Только вот жаль что про RunUO мало кто что пишет

.