Lua-скрипт и потоки

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Lua-скрипт и потоки

Post by fml2 »

В каком/каких потоках (thread) выполняется код из автозагружаемых скриптов, написанных на Lua? "Автозагружаемых" в том смысле, что скрипт находится в каталоге %farprofile%\Macros\scripts.

Это выполняется в основном Фаровском потоке? Или для каждого скрипта свой? Или у Фара свой, а у скриптов (всех) другой, но один на всех?

Я спрашиваю, потому что хочу написать скрипт, который будет совершать блокирующий (надолго!) вызов. И, естественно, не хочется, чтобы эта блокировка тормозила всех остальных. Если это имеет значение: скрипт не работает с GUI, т.е. не осуществляет никакого вывода на экран (ни сам, ни через фаровские функции).

Если такая блокировка будет всех тормозить: как создать в скрипте собственный поток? Напрямую (через FFI) вызывать соответствующие функции WINAPI?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lua-скрипт и потоки

Post by Shmuel »

Макросы выполняются в основном потоке Фара.

При использовании дополнительных потоков следует иметь в виду, что только немногие функции Far API являются thread-safe, большинство таковыми не являются. Функции Lua API также не являются thread-safe.

Многопоточность в Lua-скрипте можно организовать, используя FFI и/или одну из нескольких Lua-библиотек, специально для этого написанных. Самая известная из этих библиотек - Lua Lanes.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Lua-скрипт и потоки

Post by zg »

Shmuel wrote:только немногие функции Far API являются thread-safe
а конкретно ACTL_SYNCHRO и ACTL_GETWINDOWTYPE.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Lua-скрипт и потоки

Post by fml2 »

А возможно ли функцию, написанную на Lua, преобразовать к LPTHREAD_START_ROUTINE (тип, используемый в фукции CreateThread)? Тогда бы можно было создать поток непосредственно с помощью WINAPI, а саму функцию потока написать на Lua.

А иначе мне, наверное, придется все переделывать с Lua на обычный/полноценный плагин на C.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lua-скрипт и потоки

Post by Shmuel »

fml2 wrote:А иначе мне, наверное, придется все переделывать с Lua на обычный/полноценный плагин на C.
Это будет правильное решение.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua-скрипт и потоки

Post by John Doe »

Разве через ffi не решаемо?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lua-скрипт и потоки

Post by Shmuel »

John Doe wrote:Разве через ffi не решаемо?
Может быть и решаемо, я не пробовал.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Lua-скрипт и потоки

Post by zg »

функции луаджит нормально передаёт, даже сам калингконвеншн определяет. но действительно не очень понятно, зачем нужны такие заморочки, если есть возможность написать плагин на сях.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Lua-скрипт и потоки

Post by fml2 »

Я, честно говоря, выбрал Lua, потому что с ним не надо компилировать. А значит, не надо создавать проект и т.д. Я не знаю, как создать плагиновый проект :oops: (какие файлы куда копировать и т.д.)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua-скрипт и потоки

Post by John Doe »

Shmuel wrote:Многопоточность в Lua-скрипте можно организовать, используя FFI и/или одну из нескольких Lua-библиотек, специально для этого написанных. Самая известная из этих библиотек - Lua Lanes.
Попался краткий обзор: http://www.luteus.biz/Download/LoriotPr ... rison.html
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Lua-скрипт и потоки

Post by Shmuel »

John Doe wrote:Попался краткий обзор: http://www.luteus.biz/Download/LoriotPr ... rison.html
Это довольно устаревший обзор (возможно, 5-7 летней давности). С тех пор появился ряд новых библиотек для поддержки многопоточности в Lua.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Lua-скрипт и потоки

Post by John Doe »

zg wrote:но действительно не очень понятно, зачем нужны такие заморочки, если есть возможность написать плагин на сях.
Это ж кому как.
И потом, после преодоления всяких сложностей, в итоге может оказаться что потоки и нужны-то не были.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Lua-скрипт и потоки

Post by fml2 »

John Doe wrote:в итоге может оказаться что потоки и нужны-то не были.
Я этого не исключаю и поэтому написал вопрос в соответствующей теме.
Post Reply

Return to “Нужна помощь”