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
А разве нельзя вставить это проверку

Code: Select all

if uo.life<100 then 

в твою вызываемую функцию "fgonext()" ??
если условие совпадет, то там уж сам решай что тебе нужно

Code: Select all

uo.exec('terminate main')

или

Code: Select all

UO.Exec('terminate all')

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 есть какая нить функция для проверки на живость саба :lol: :lol: :lol: но всерно парни всем СПС

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