Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
2.4.2012, 11:31 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Сборщик мусора периодически чистит всё подряд, что не задействовано, вне зависимости от величины этого мусора, или у него есть какой-то порог на очистку? Раскрывающийся текст Код 2.10 - Сборщик мусора Lua осуществляет автоматическое управление памятью. Это означает, что вам не нужно думать о выделении памяти при создании новых объектов и ее освобождении, когда объект становится ненужным. Lua время от времени автоматически запускает процедуру сборки мусора для удаления устаревших объектов (то есть объектов, которые более недоступны из Lua). Сборщик мусора обрабатывает все объекты Lua: таблицы, данные типа userdata, функции, потоки и строки. В Lua реализован инкрементный сборщик по принципу пометить-очистить. Цикл работы сборщика мусора зависит от двух параметров: пауза сборки мусора и коэффициент шага сборки. Паузой определяется время между запусками циклов сборки. Большие значения этого параметра делают сборку мусора менее активной. Значения меньше 1 означают, что между запусками циклов сборки паузы нет. При значении 2 сборщик перед следующим запуском ждет удвоения объема использованной памяти. Коэффициент шага сборки управляет скоростью сборки в зависимости от интенсивности выделения памяти. Большие значения параметра ускоряют работу сборщика, но при этом увеличивается размер каждого шага. Вы можете менять эти параметры посредством вызова lua_gc в C или collectgarbage в Lua. В обоих случаях в качестве аргументов берутся проценты (т.е. аргумент 100 означает значение параметра 1).Этими функциями вы можете непосредственно управлять сборкой (например, останавливать ее или рестартовать). 2.10.1 - Метаметоды сборщика мусора Используя C API, мы можем определить метаметоды сборщика для данных типа userdata (смотрите §2.8). Эти метаметоды также называются файнолайзерами. Файнолайзер позволяет вам координировать работу сборщика мусора Lua с внешними менеджерами ресурсов (например при закрытии файлов, сетевых подключений и подключений к базам данных, или же при освобождении собственной памяти). Данные сборщика мусора с полем __gc в собственной метатаблице не хранятся непосредственно в нем. Вместо этого Lua сохраняет их в списке. После сбора мусора Lua выполняет над этими данными функцию, эквивалентную: function gc_event (udata) local h = metatable(udata).__gc if h then h(udata) end end После каждого цикла сбора, финализаторы каждого элемента данных вызываются в порядке, обратном порядку их создания в цикле. Таким образом, первый файнолайзер будет вызван для объекта, созданного последним. 2.10.2 - Таблицы «слабых» ссылок Таблицы этого типа используются для хранения «слабых» ссылок (weak references). Сборщик мусора игнорирует «слабые» ссылки. Другими словами, если единственной ссылкой на объект является «слабая» ссылка, то сборщик мусора сохраняет этот объект в такой таблице. Таблица «слабых» ссылок может содержать «слабые» ключи, «слабые» значения, а также и то, и другое. Таблица со «слабыми» ключами позволяет хранить эти ключи, но не допускает хранение их значений. Таблица со «слабыми» ключами и «слабыми» значениями соответственно позволяет хранить и ключи, и значения. Таким образом, если ключ или значение сохранены, то соответствующая пара удаляется из таблицы. «Слабость» в таблице контролируется полем __mode ее метатаблицы. Если поле __mode это строка, содержащая символ 'k', то ключи в таблице «слабые». Если __mode содержит 'v', то в таблице хранятся «слабые» значения. После использования таблицы как метатаблицы вы не можете изменить поле __mode. Таким образом, «слабое» поведение таблицы, за которое отвечает метатаблица, переопределить нельзя. Скачай справочник по lua для начала или книги по lua благо их предостаточно |
MIKHAIL | ||
1.4.2012, 9:35 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Уважаемые, у меня такой вопрос. По окончанию работы функции OnStartup() остаются "отработанные" переменные, которые впоследствии не используются. Возможно ли их убрать, чтобы не ели системные ресурсы? сборщик мусора добавь Код collectgarbage() Например: Код function OnStartup() .... -- то что у тебя в функции collectgarbage() -- сборщик мусора end Если чего не так говорю меня товарищи более опытные поправят |
MIKHAIL | ||
26.3.2012, 10:23 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Имеем два скриптовых файла ("file1.lua" и "file2.lua"), в которых есть глобальные строковые переменные (sTmp1 и sTmp2 соответственно), которые, естественно, в процессе работы меняют свои значения. Скажите, пожалуйста, как в этих скриптах сделать перекрёстный запрос на текущие значения этих переменных (в "file1.lua" прочитать значение sTmp2, а в "file2.lua" прочитать sTmp1 соответственно)? А если двум разным скриптам допиши сохранение переменной в файл как только она меняется в скриптах, а затем просто нужную тебе запроси |
MIKHAIL | ||
22.3.2012, 10:57 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Хотелось бы узнать, допустимо ли в пути (http://hostname/dir/file.ext) использовать буквы кириллицы? Код ... local sMsg,sErr = h.request("http://hostname/dir/file.ext") ... Например, "http://hostname/директория/файл.ext"... Работать будет также чётко, как и с латиницей? Посмтори это: а вообще переводи русский текст в utf-8 для запроса |
MIKHAIL | ||
14.3.2012, 3:57 |
помогите переделать скрипт для Ptokax |
Поговорим о Великом и Могучем Русском Языке... хотя лучше о языке lua Многострочный текст в нём можно записать так: Код trigs = { ["привет"]={ [[ [curUser], и тебе здорово! И здрасти и всё что душе угодно!]] }, Это позволяет отредактировать твой текст прямо в скрипте т.е. всё что ты писал заключая в кавычки ты заключаешь в двойные скобки [[ твой текст (перенос на новую строку осуществляется энтером, как в обычном тексте) ]] |
N3RO | ||
14.3.2012, 0:49 |
Комплименты Выводит комплимент выбранному пользователю из чата |
Нашёл только один способ как убрать из меню во вкладке "меню" твоего скрипта. Короче в клиенте ДЦ есть в настройках "команда юзера" там прописываешь и получается этоже меню но только при клике по юзеру в чате или в списке неважно. Так проще и хаб ненагружает скриптами. Ну ты и правда целый геморрой устроил! Причём тут ХАБ? меню тебе в хабе не мешает! А каждый если хочет себе добавить меню уже в своём клиенте это его дело. Но специально для тебя: Тип команды - Чат Контекст - Меню юзера , Меню хаба Название - Моё меню\Комплимент\Девушке Команда - "скобки убери" ( !compl 1 %[userNI]) для парня всё точно также только поменяй 1 на 2! |
nafig | ||
12.3.2012, 17:25 |
Комплименты Выводит комплимент выбранному пользователю из чата |
AfLc | |||
12.3.2012, 15:49 |
Комплименты Выводит комплимент выбранному пользователю из чата |
Название: Комплимент Автор: AirKobra45 Версия API: API2 Описание скрипта: Выводит комплимент выбранному пользователю из чата. Как-то в аське увидел такую штуку.. ну мне захотелось тож самое и в ДЦ задуманно - сделано! (ещё год назад) Вот смотрим комментируем пользуемся! |
Nickolya, Tsd, rival, TiGRpp, Inkvizitor_ks, nafig, Littlemuk, AfLc | ||
26.2.2012, 18:16 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
К примеру: Код fd = "Привет"sFile = Core.GetPtokaXPath().."scripts/goro/sXML.lua" --путь до файла PtokaX.exe и далее приписываем где создать файл директорию и имя f = io.open( sFile , "w+" ) --создаём файл sXML.lua (если такой есть он сотрётся) f:write(fd) -- пишем то что надо в файл f:flush() --сохраняем то что записали f:close() -- закрываем файл если ты указал w а не w+ то во время его использования пока ты не сохранил и не закрыл его ты не сможешь его прочесть но всегда можно написать Код f = io.open( sFile , "r+" ) если ты уже что-то сохранял в файл А вообще сперва определись как скрипт будет с ним работать и ставь нужный символ Вот к примеру: Код function OnStartup() Load() end function Load() fd = "Привет мир!" sFile = Core.GetPtokaXPath().."scripts/Goro5/sXML.lua" --путь до файла PtokaX.exe и далее приписываем где создать файл директорию и имя local f = io.open( sFile , "w+" ) --создаём файл sXML.lua (если такой есть он сотрётся) f:write(fd) -- пишем то что надо в файл f:flush() --сохраняем то что записали f:close() -- закрываем файл g = LoadText(sFile) -- а теперь мы можем его прочитать с помощью этой функции Core.SendToAll(""..g) end function LoadText(sFile) local sMsg = "" local f = io.open( sFile , "r" ) if f then sMsg = f:read("*all") f:close() end return sMsg end !! Директория для сохранения файла должна существовать! |
MIKHAIL | ||
26.2.2012, 9:35 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Подскажите, пожалуйста, что означает добавление плюса "+" в режим открытия файла, т. к. встречается такое частенько?.. В режиме чтения файла: Код io.open(file,"a+") или ещё видел в режиме записи: Код io.open(file,"w+") Повторение мать учения... (повторюсь за setuper - ом): тут ранее писали об этом: жмём сюда Код На lua.ru плохо написано. "r" - открыть файл для чтения. Файл должен существовать. "w" - создать пустой файл для записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл. "a" - добавить в файл. Дописывает данные в конец файла. Файл создается, если он не существует. "r+" - открыть файл как для чтения, так и для записи. Файл должен существовать. "w+" - создать пустой файл для чтения и записи. Если файл с таким именем уже существует, то его содержание будет удалено, а файл будет рассматриваться как новый пустой файл. "a+" - открыть файл для чтения и добавления. Все операции записи выполняются в конец файла. Файл создается, если он не существует. Кроме этого, для работы с бинарными файлами существуют моды: "rb", "wb", "ab", "r+b", "w+b", "a+b", то есть теже самые моды но с буквой b на конце. Буква b может также находится и в середине: "rb+", "wb+", "ab+" Можно сказать это более расширенные опции подскажите почему не работает эта конструкция? Код t = okrugl(10) Core.SendToAll(""..t) function okrugl(a) local b = math.floor(a) local c = (a % b) if c == 0 then local ans = a elseif c < 0.5 then ans = b elseif c >= 0.5 then ans = math.ceil(a) end return ans end Пишет Код attempt to call global 'okrugl' (a nil value) И вообще можно ли окраглить не к ближайшему меньшему или большему а по правилам округления? |
MIKHAIL | ||
12.2.2011, 22:21 |
antiproxy: запрет на прокси API2 |
И вообще зачем писать что есть скрипт если ты его не выкладываешь. Да и написать его тоже можно те кому надо себе сделали подобное. а то что ты его сделал чего то так орать всё равно его нет (прикреплённого файла) |
absent, мамин_парень | ||
|
Сейчас: 23.12.2024, 8:59 |