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

Как сделать проверку выключения скрипта?
http://forum.yoko.com.ua/viewtopic.php?f=3&t=7211
Page 1 of 1

Author:  Sanch [ 2006-03-31 15:47:33 ]
Post subject:  Как сделать проверку выключения скрипта?

Собсно хочу чтобы мои скрипты работали стабильнее, скрипт можно вырубить uo.exec('terminate *****'), но это вещь оч не надежная как можно сделать проверку выключения скрипта и можно ли вообще это сделать.

что то вроде:

nac:
uo.exec('terminate *****')
wait(1000)
if not uo.exec('terminate *****') then
goto nac
endif

Зарание благодарю за помощь.

Author:  Sfagnum [ 2006-03-31 15:49:39 ]
Post subject:  Re: Как сделать проверку выключения скрипта?

не было нарицаний на эту команду.
узнать мжн ток извратами - но ИМХО они ещё менее надёжны...

Author:  Grin [ 2006-03-31 16:03:30 ]
Post subject: 

пусть скрипт пишет в глобальную переменую время
второй проверяет если дельта больше то значит скрипт умер;)

Author:  Sanch [ 2006-03-31 16:53:19 ]
Post subject: 

Из того что сказал Грин не понял ни слова и решил оставить все без изменений :)

Author:  Destruction [ 2006-03-31 19:21:07 ]
Post subject: 

Sanch wrote:
Из того что сказал Грин не понял ни слова и решил оставить все без изменений :)

Это он общую идею выразил, вообще всё чуточку понятнее, чем сказал грин :wink:

ЗЫ: Лучше делать поменьше финтов - скрипт будет дольше жить.

ЗЫЫ: Пример проверки выключения скрипта (один из извратов).
Code:
Sub MainOne()
uo.setEasyUO(1,"true")
uo.deleteJournal()
repeat
wait(100)
until uo.injournal("terminate MainOne")
uo.setEasyUO(1,"false")
endsub

Sub MainTwo()
while uo.getEasyUO(1) == "true"
wait(100)
wend
uo.print("Функция MainOne была отключена")
endsub

Инструктирую как пользовать - запускаем сначала функцию MainOne (он сразу же в переменную изи записывает true), затем MainTwo, затем произносим "terminate MainOne" - первый саб реагирует на эту фразу и завершается, перед завершением записав в переменную изи false, тем временем второй саб, увидев что в переменной (1) изи уже ложь - выходит из цикла, и сообщает, об отключении такой-то функции.

Старался объяснить доступным языком, но кажеться загнул.

PS: Кто-бы, что-бы там не говорил, я настоятельно не рекомендую использовать (set|get)Global, а рекомендую использовать (set|get)EasyUO, на мой взгляд она намного стабильнее (первая вероятно пишет куда-то во внутреннюю память, которая в итоге забивается, а вторая пишет в реестр, а там места много, один из плюсов - сведения в реестре никуда после выключения инжекта не денуться... ну не должны -))

PPS: Чтобы использовать (set|get)EasyUO необходимо создать соответсвующую ветку в реестре ИЛИ установить EasyUO, чтобы открыть редактор реестра - Start (Пуск) -> Run (Выполнить) -> RegEdit, дальше создаёте соответсвующую ветвь (если её нету, инжект при использовании команд (set|get)EasyUO будет ругаться на отсутствие необходимой ветки в реестре, непремянув сказать какой именно).

Author:  Grin [ 2006-03-31 19:45:36 ]
Post subject: 

ктото еще говорил что инджорнал очень глючный... :roll:

Author:  Sanch [ 2006-03-31 19:55:56 ]
Post subject: 

Не знаю насчет инджорнала, но за помощь большое спс, вообще сам я
не проверял надежность терминейта. просто видел много скриптов где один и тоже же скритп терминейтится 3 раза подряд, подумал это не с спроста, еще раз большое спасибо.

Author:  Grin [ 2006-03-31 20:09:17 ]
Post subject: 

если нужно терминейтить из самого сприпта то юзай return

Author:  Sanch [ 2006-04-01 17:27:39 ]
Post subject: 

А чуть подробнее можно как терминейтить через ретёрн?

Author:  Grin [ 2006-04-01 17:33:00 ]
Post subject: 

return вызывается только в теле скрипта который надо завершить по условию...
тоесть
Code:
while not uo.Dead()
wait(100)
if uo.life < 50 then
return
end if
wend

хоть тут и бесконечный цикл, но он все равно закончится если жизней тсанет меньше 50

Author:  Sanch [ 2006-04-01 17:51:43 ]
Post subject: 

Ясно, спасибо...

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