Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
vvzvlad
0 / 0 / 0
Регистрация: 03.11.2013
Сообщений: 4
#1

Как вынести набор команд в отдельную функцию в lua? - Lua

15.07.2015, 21:13. Просмотров 361. Ответов 0
Метки нет (Все метки)

Есть вот такой код на lua:


Код
require('sem')
semaphore = sem.open('RS485-3')
timeout = 10 * 2 
while not semaphore:trywait() and timeout > 0 do 
  sleep(0.5)
  timeout = timeout - 1
end
Код
semaphore:post()
sem_local:close()

Реализует семафоры для того, чтобы разные потоки не конкурировали за порт. Проблема в том, что вот конкретно эти куски кода повторяются именно в таком виде довольно часто в разных скриптах, и хорошо бы их вынести в одно место, чтобы не копировать туда-сюда. Да и править если что - в одном месте, а не во многих. В идеале хочу функции вида semaphore_manager:wait и semaphore_manager:release, вместо этих строчек кода.

Пробовал сделать как-то так:

Код
function semaphore_manager:wait(name)
require('sem')
semaphore = sem.open(name)
timeout = 10 * 2 
while not semaphore:trywait() and timeout > 0 do 
  sleep(0.5)
  timeout = timeout - 1
end 
return semaphore
end
Код
function semaphore_manager:wait(sem_local)
sem_local:post()
sem_local:close()
end

но как-то не получилось, невнятно ругается. "loop or previous error loading module 'user.sem_manager'" и "attempt to index global 'sem_manager' (a nil value)"
Я понимаю, что это надо делать в самой библиотеке sem, которая это и реализует, но к ней доступа нет, а порядка в коде хочется.



И вдогонку вопрос примерно про тоже самое. Я делаю вот такую функцию:

Код
function modbus(action, slave)
  if (action == 'connect') then
    require('luamodbus')
    mb = luamodbus.rtu()
    mb:open('/dev/RS485-3', 115200, 'N', 8, 1, 'H')
    mb:connect()
    mb:setslave(slave)
    local amount,  modbus_error = mb:readregisters(1)
    return amount, modbus_error
  elseif (action == 'disconnect') then
    mb:close()
  end
end

И вызываю ее соответственно

Код
  count_sensors, m_error = modbus('connect', slave_devices[i])
  modbus('disconnect')
Правильно ли я делаю? Вроде работает, но иногда глючит. Не может быть в этом дело?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2015, 21:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как вынести набор команд в отдельную функцию в lua? (Lua):

Как декомпилировать lua? - Lua
Здравствуйте, есть компилированный lua файл, подскажите как его декомпилировать, какие есть для этого программы?

Ввод с клавиатуры в LUA как внедрить? - Lua
Не получается сделать на Lua + love2D код чтобы можно поменять пару параметров используя ввод с клавиатуры. Izquedra Derecha Знаток...

Как встроить LUA в visual studio - Lua
Вопрос в название темы. Я скачал LUA последнюю версию, там куча файлов с расширением .c и .h искал в интернете везде написано...

Как работать с Lua, какая нужна среда - Lua
Как я понимаю, что Lua хорош для разработки игр, но как в нем работать? Какая среда нужна, и, что самое главное, как ее установить? Скачал...

Как вывести на печать данные из таблицы из lua-файла? - Lua
Создал "t.lua". файл содержит: require("data"); print(tostring(arr)) data.lua содержит: arr= ...

Как вынести из программы линейный поиск в отдельную функцию? - C (СИ)
Добрый день всем, я для саморазвития решил изучить основы Си, сам я очень далек от программирования. Сейчас прохожу небольшой курс, и в...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 21:13
Привет! Вот еще темы с ответами:

Вынести суммирование в отдельную функцию - C++
Ребят, подскажите как сделать тут функцию и от минуса уйти, никак не могу понять: #include "stdafx.h" #include <iostream> #include...

Вынести обработчик события в отдельную функцию. - JavaScript
Что то бред какой то,помогите это переписать в функцию document.getElementById('btn').onclick = function () { var newBtn =...

Вынести в отдельную функцию заполнение массива - C++
Здравствуйте,у меня не работает программа,я попытался запихнуть в отдельную функцию заполнение случайного массива,но выводит ошибки код: ...

Требуется вынести повторяющиеся действия в отдельную функцию - C (СИ)
У меня есть, допустим n-ое кол-во чисел и все их надо разбить на массив. Я думаю, что для каждого числа задавать цикл и таким образом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru