Yoko
http://forum.yoko.com.ua/

Трабла с UO.Exec('terminate ...')
http://forum.yoko.com.ua/viewtopic.php?f=20&t=4398
Page 1 of 1

Author:  Don SpiL [ 2005-07-04 07:34:25 ]
Post subject:  Трабла с UO.Exec('terminate ...')

Собсна сабж.К примеру если есть такой саб...
Code:
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 НЕ происходит!!

Хелпните парни =( мож я че торможу ?

Author:  666Man666 [ 2005-07-04 09:48:13 ]
Post subject: 

Поставь, поможет )
Code:
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')

Author:  Don SpiL [ 2005-07-04 10:05:50 ]
Post subject: 

666Man666 wrote:
Поставь, поможет )
Code:
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')
   Wait(200)
   UO.Exec('terminate all')

=( В том то все и дело что мне ненада тушить все!! мне надо тушить только определенные сабы! а вот иногда не пашет.

2Yoko - думаю проблема глобальна и требует твоей помощи! Я вот думаю как мне описать чтоб саб не выполнялся пока не потухнет другой (заданный саб).

Author:  666Man666 [ 2005-07-04 10:49:41 ]
Post subject: 

Ну поставь не ALL а свой MAIN
Code:
UO.Exec('terminate main') 
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')

а чтобы не запускался другой саб если не потухнит этот, ставь глобалки...

Code:
If UO.GetGlobal('Check')<>'on' Then
   UO.SetGlobal('Check','on')
   *Код*
   UO.SetGlobal('Check','off')
Else
   UO.Print("Wait")
End If

Author:  Askaneli [ 2005-07-04 11:01:06 ]
Post subject: 

Я не понял конечно почему не тушится
Но раз уж не тушится, то можно через те же самые глобальные переменные и тушить процедуру.

Author:  Don SpiL [ 2005-07-04 11:02:34 ]
Post subject: 

666Man666 wrote:
Ну поставь не ALL а свой MAIN
Code:
UO.Exec('terminate main') 
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')
Wait(200)
UO.Exec('terminate main')

а чтобы не запускался другой саб если не потухнит этот, ставь глобалки...

Code:
If UO.GetGlobal('Check')<>'on' Then
   UO.SetGlobal('Check','on')
   *Код*
   UO.SetGlobal('Check','off')
Else
   UO.Print("Wait")
End If


Спасиб всем!! Первый варинт болеее надежнее второго! хотя второй тоже норм но не дает гарнтии того что тот саб всетки потухнет.

Я решил траблу малость по другому.Хоть саб fgonext() и не виден как запущенный всерно делаю его терминейт перед терминейтом main и... алилуйя заработало =))

Еще раз всем СПС!!!

Author:  Don SpiL [ 2005-07-04 11:08:19 ]
Post subject: 

Askaneli wrote:
Я не понял конечно почему не тушится
Но раз уж не тушится, то можно через те же самые глобальные переменные и тушить процедуру.

Нукс расскажи мне ламеру =)))) как можно через те-же глобальные переменные потушить саб ?Ну к примеру при старте того саба что нуно потушить он задает гл.переменную=on в начале и off в конце саба! пральна?,так ты хотел устроить?
А дальше ?ну проверим мы гл.переменную и увидим что она "on" пытаемся ее терминейт! а до какого события будем слать терминейт сабу main, как ты узнаешь что она действительно в дауне ?!

Author:  flake [ 2005-07-04 11:10:54 ]
Post subject: 

цикл с вейтов, пока не измениться глобальная переменная.

Author:  Don SpiL [ 2005-07-04 11:58:45 ]
Post subject: 

flake wrote:
цикл с вейтов, пока не измениться глобальная переменная.
Хорошо! к примеру после второго теминейта саб уйдет в даун и как теперь понять что он в дауне? - ведь сетглобал офф стоит в том сабе который мы собственно и тушим!, а если мы его потушили то собсна и сетглобал не пройдет и останеться = on! или ставить фор на на штук 10 циклов проверки после чего считать саб потушенным:cry:?
И еще нюанс! cаб main у меня циклический !! :!:

Author:  Askaneli [ 2005-07-04 12:05:16 ]
Post subject: 

Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.

Author:  Don SpiL [ 2005-07-04 12:12:06 ]
Post subject: 

Askaneli wrote:
Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.

Ну ты пойми!! яж не выдумываю! у мя тоже все именно так и построено!! да и вапче у всех норм кодеров так и должно быть =). Но сам факт есть факт !! причем я не говорю что она всегда не тухнет, но 50/50 потухнет или нет! И всетаки мне пришлость вписать в терминейт именно те сабы которые были вызваны мейном а потом только тушить сам мейн, и вот тогда все сто процентно!!
И еще чтоб не путать народ у меня основной саб не main а control .

Author:  Wahoocka [ 2005-07-04 12:30:32 ]
Post subject: 

А разве нельзя вставить это проверку
Code:
if uo.life<100 then 

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

Code:
uo.exec('terminate main')

или
Code:
UO.Exec('terminate all')

Author:  Askaneli [ 2005-07-04 12:33:26 ]
Post subject: 

Don SpiL wrote:
Askaneli wrote:
Блин
Ну не бывает такого чтоб не тушилась процедура.
У меня большое количество скриптов где основная процедура в 5 строчек а всё делают дочерние, которые в свою очередь ещё вызывают процедуры.
Гашу главную скрипт весь останавливается.

Ну ты пойми!! яж не выдумываю! у мя тоже все именно так и построено!! да и вапче у всех норм кодеров так и должно быть =). Но сам факт есть факт !! причем я не говорю что она всегда не тухнет, но 50/50 потухнет или нет! И всетаки мне пришлость вписать в терминейт именно те сабы которые были вызваны мейном а потом только тушить сам мейн, и вот тогда все сто процентно!!
И еще чтоб не путать народ у меня основной саб не main а control .

Я те говорю что тухнет в 100% случаев

Author:  Don SpiL [ 2005-07-05 05:25:32 ]
Post subject: 

Ладно парни всем спасибо!! Те способы что все мы тут изложили это изврат!! не стабильный изврат! Я надеялся что у Yoko есть какая нить функция для проверки на живость саба :lol: :lol: :lol: но всерно парни всем СПС

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

Page 1 of 1 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/