Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Вопрос по привязке окна внутри процедуры proc

Автор: sel 7.12.2018, 10:31

Прошу прощения если такие темы уже существуют, вопрос связан с процедурами.
В общем не работает команда:

Код
set workwindow "переменная с хендлом"

Внутри процедуры proc, выдаёт такую ошибку:
Изображение
Сам код:
Код
call test

proc test
set #handleWin findWindow (Калькулятор)
set workwindow #handleWin
end_proc
end_script


Единственный вариант пока, который я для себя нашёл, это делать что то такое:
Код
call test
set workwindow $test

proc test
set #handleWin findWindow (Калькулятор)
set $result #handleWin
end_proc
end_script


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

Автор: sutra 7.12.2018, 12:51

Конечно это не моё дело, но ЗАЧЕМ нужен именно proc? Не проще использовать gosub? Будут доступны все переменные и вызов быстрее.

Код
set #ww
set timer
for #i 1 100
  call test
end_for
log timer
log #ww

set timer
for #i 1 100
  gosub test2
end_for
log timer
log #ww

:test2
set #handleWin findWindow (Калькулятор)
set #ww #handleWin
return

proc test
set #handleWin findWindow (Калькулятор)
set #ww.9 #handleWin  // у меня 9 вкладка скрипта, переделать под свою
end_proc
end_script

Автор: sutra 7.12.2018, 13:04

Ну а если принципиально нужен proc тогда нужно указывать ссылку на вкладку скрипта. Proc - это по сути вызов параллельного скрипта.

Код
call test
send 2

proc test
set #handleWin findWindow (Калькулятор)
set workwindow.9 #handleWin   // вкладка рабочего скрипта, у меня 9
end_proc
end_script

Автор: WKnight 7.12.2018, 13:19

Цитата
Внутри процедуры proc, выдаёт такую ошибку:
Эта фишка продержалась необнаруженной с версии 2.15...
Починил.

Автор: sutra 7.12.2018, 13:24

Цитата
Эта фишка продержалась необнаруженной с версии 2.15...

Значит не очень была востребована. Конечно разные бывают ситуации, насколько я понимаю просто запускается кусок кода. Не проверял ждёт возвращения или нет, если ждёт возвращения в основное тело, то я вообще не вижу смысла применения.

Автор: sutra 7.12.2018, 13:47

Кстати, в своё время пытался ускорить работу путём запуска нескольких параллельных скриптов, без ожидания завершения. Может конечно чего не то делал, но прироста производительности не обнаружил, на вскидку, Пилот не задействовал другие ядра проца.

Автор: WKnight 7.12.2018, 14:01

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

Автор: sutra 7.12.2018, 14:09

Цитата
Но некоторые вещи небезопасно запускать в потоках, поэтому они выполняются в контексте основного потока последовательно.
Спасибо Кнайт за информацию, я в общем примерно так себе и представлял. Ну теперь лично для меня это всё не актуально, lua конечно в некоторых вещах даёт просто несравненно бОльшие возможности.

Автор: sel 7.12.2018, 17:30

Цитата(WKnight @ 7.12.2018, 15:19) *

Эта фишка продержалась необнаруженной с версии 2.15...
Починил.


Спасибо большое!:)

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)