Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Вопрос по привязке окна внутри процедуры proc
sel
сообщение 7.12.2018, 10:31
Сообщение #1


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



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

Внутри процедуры proc, выдаёт такую ошибку:
(IMG:http://skrinshoter.ru/i/071218/pRqLIBv6.png)
Сам код:
Код
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


Но такое решение меня не устраивает, потому что я не могу в таком случае вызывать одну процедуру из другой в тех случаях, когда требуется работа с разными окнами, и код в разы увеличивается, есть какое то решение или обход этой проблемы?
Заранее спасибо за ответ.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.12.2018, 12:51
Сообщение #2


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Конечно это не моё дело, но ЗАЧЕМ нужен именно 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
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.12.2018, 13:04
Сообщение #3


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



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

proc test
set #handleWin findWindow (Калькулятор)
set workwindow.9 #handleWin   // вкладка рабочего скрипта, у меня 9
end_proc
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 7.12.2018, 13:19
Сообщение #4


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Цитата
Внутри процедуры proc, выдаёт такую ошибку:
Эта фишка продержалась необнаруженной с версии 2.15...
Починил.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.12.2018, 13:24
Сообщение #5


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



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

Значит не очень была востребована. Конечно разные бывают ситуации, насколько я понимаю просто запускается кусок кода. Не проверял ждёт возвращения или нет, если ждёт возвращения в основное тело, то я вообще не вижу смысла применения.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.12.2018, 13:47
Сообщение #6


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Кстати, в своё время пытался ускорить работу путём запуска нескольких параллельных скриптов, без ожидания завершения. Может конечно чего не то делал, но прироста производительности не обнаружил, на вскидку, Пилот не задействовал другие ядра проца.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 7.12.2018, 14:01
Сообщение #7


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Распределением задействования ядер занимается винда. Пилот запускает всё возможное в разных потоках, для того, чтоб у винды был богаче выбор. Но некоторые вещи небезопасно запускать в потоках, поэтому они выполняются в контексте основного потока последовательно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.12.2018, 14:09
Сообщение #8


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Но некоторые вещи небезопасно запускать в потоках, поэтому они выполняются в контексте основного потока последовательно.
Спасибо Кнайт за информацию, я в общем примерно так себе и представлял. Ну теперь лично для меня это всё не актуально, lua конечно в некоторых вещах даёт просто несравненно бОльшие возможности.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sel
сообщение 7.12.2018, 17:30
Сообщение #9


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



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

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


Спасибо большое!:)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 13:16
Designed by Nickostyle