Lua-AIO (Lua All-in-One) представляет собой пакет для написания программ на Lua, созданный по принципу "Всё в одном". Пакет включает в себя практически все библиотеки, которые могут понадобиться при написании приложений.
В состав пакета входят:
Хост-программа Lua-AIO (lua.exe) - приложение, позволяющее запускать Lua-скрипты. Отличия от хост-программы из официального дистрибутива Lua:
Кодthid = ThreadCreate(function, {args,...})Создает ветвь для выполнения функции "function" с аргументами "args,...". Функция возвращает идентификатор ветви "thid".КодThreadDestroy(thid)Уничтожает ветвь "thid", созданную при помощи функции ThreadCreate.КодThreadWait(msec)Приостанавливает ветвь на "msec" миллисекунд.КодThreadNewMutex()Создает , который может быть использован при помощи функций ThreadLockMutex и ThreadUnlockMutex.КодThreadLockMutex(mutex)Блокирует совместный доступ к указанному мьютексу (предварительно созданному при помощи функции ThreadNewMutex)КодThreadUnlockMutex(mutex)Разрешает совместный доступ к указанному мьютексу (предварительно созданному при помощи функции ThreadNewMutex)КодThreadDestroyMutex(mutex)Уничтожает мьютекс
Кодfunction OnError(msg) ... endВызывается при возникновении ошибки в скрипте.Кодfunction OnStop() ... endВызывается при получении kill-сигнала при использовании под Linux, а также при остановке службы Windows.
luaaio_doc.rar ( 4.67 мегабайт )
: 65Первый (и самый очевидный): При запуске хост-программы указываем имя скрипта в качестве параметра командной строки. Например:Код"C:\luaaio\lua.exe" C:\scripts\myscript.lua
При этом можно использовать относительный путь. Т.е. если Ваш скрипт лежит в папке Lua-AIO, то запустить его можно так:Код"C:\luaaio\lua.exe" myscript.lua
Разумеется, если имя скрипта содержит пробелы, его необходимо заключить в кавычки.
Второй (плавно вытекающий из первого): Тупо перетащить Ваш скрипт на иконку lua.exe. Результат ничем не отличается от предыдущего, с той лишь разницей, что при этом совершается меньше телодвижений.
Третий способ (правильный): присвоить хост-программе имя Вашего скрипта. Например, если скрипт зовется "myscript.lua", то необходимо переименовать lua.exe в myscript.exe. Данный способ имеет одно очень важное преимущество - при попытке запуска скрипта, содержащего грубую синтаксическую ошибку, хост-программа выдаст сообщение, содержащее подробную информацию о характере ошибки. При использовании первых двух способов, приложение закроется молча, и Вам прийдется самостоятельно выяснять причину незапуска скрипта.
alex82, если есть опыт - расскажи пожалуйста про мьютексы и потоки, а то мне кажется это не дает никакого прироста производительности, только заморочка, а единственный плюс - изолированность, которая при грамотном построении скрипта и не нужна.
Nickolya
Преимущество многопоточности - не изолированность, а независимость скрипта (да и, в общем-то, самой хост программы, под управлением которой работает этот скрипт) от времени выполнения определенных функций в тех случаях, когда время выполнения этих функций ограничено не производительностью компа, а чем-то иным.
Ты ведь наверняка замечал подвисания PtokaX при использовании на ней скриптов, использующих библиотеку сокетов. А ведь этого можно избежать, если запускать функции, отвечающие за получение информации из сети, в отдельной ветви.
В качестве другого примера могу привести твой пингер хабов. Вот скажи - может ли он пинговать несколько хабов одновременно? Могу поспорить что нет. А мой может, поскольку использует многопоточность.
Также не стоит забывать, что Lua-AIO используется для создания программ с графическим интерфейсом, и использование ветвей позволяет избежать подвисания GUI во время выполнения продолжительных и ресурсоемких фрагментов кода.
Пингер пингует несколько хабов, не одновременно конечно, в одном потоке, но писалось оно на движке птоки, так что думать о потоках не приходилось. Если все так прекрасно, приведи примеры кода пожалуйста использования потоков в луааио, а так же может если знаешь о подпрограммах в самом луа, пожалуйста.
Вот кусок кода из того самого пингера, о котором я говорил (некоторые фрагменты удалены, дабы не отвлекать от самой сути):
Поставил LUA AIO на Ubuntu 9.10 руководствуясь статьей.
Накидал код для примитивного тестирования. В windows работает, но при цикле в 2000 действий thread'ы отказываются создаваться. Вообще говоря, это мое первое знакомство с thread'ами.
Вот собственно сам код:
а все потому, что тарбол гнилой и мерзкий. Надо из исходников с оптимизацией
о последнем можно поподробнее??
- лови