Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. thread=require("thread")  -- подключаем библиотеку
    thread.init()             -- инициализируем многозадачность
    thread.create(os.execute, "fgtest.lua")  -- запускаем файл fgtest.lua в фоновом режиме
    thread.create(os.execute, "ttt.lua")     -- запускаем файл ttt.lua в фоновом режиме
    thread.waitForAll()       -- ожидаем завершения выполнения
    

    Лично не пробовал, но может как-то так

     

    Попробовал. Работает


  2. thread=require("thread")  -- подключаем библиотеку
    thread.init()             -- инициализируем многозадачность
    thread.create(os.execute, "fgtest.lua")  -- запускаем файл fgtest.lua в фоновом режиме
    thread.create(os.execute, "ttt.lua")     -- запускаем файл ttt.lua в фоновом режиме
    thread.waitForAll()       -- ожидаем завершения выполнения
    

    Лично не пробовал, но может как-то так


  3. Ну ты размахнулся. Такое тебе вряд ли кто сразу сделает. Предлагаю разделить твою мега-супер программу на независимые задачи и решать их по очереди. Если слон большой, его едят по кусочкам.  :)

    Давай начнем с консоли. Что такое консоль? Это пара программ (одна для робота, другая для планшета), которые позволяют видеть на планшете экран робота, а вводимые с планшета команды выполнять на роботе. Для связи планшета с роботом нужно использовать либо беспроводные сетевые карты либо пару связанных карт. Я рекомендую связанные.

    Всё остальное, что робот копает или куда летает, может быть реализовано отдельными программами, хранящимися на диске робота и запускаемыми удаленно из шела или как-то иначе через консоль.

    А вот к чему ты сюда приплел дебаг-карту мне совсем не понятно. Эта карта должна в роботе стоять и робот должен менять игровой режим, гивать и опать? Зачем? А если, нет, то какое это имеет отношение к "Отправлению команд на робота дистанционно"?

    Ну и самое главное: не проси у Бога, что б он что-то тебе сделал, а проси что бы научил, как ты сам должен сделать.


  4. Думаю, если человек пишет свою ось, ему нужно ориентироваться на стандартный Lua BIOS, а не на какой-то специализированный.

    Всё, что нужно знать о биосе, это то, что он ищет на доступных файловых системах файл init.lua и запускает его. Дальнейшая загрузка системы осуществляется уже из этого файла.


  5. init.lua запускает операционную систему. Это первый файл, который выполняется после Lua BIOS. Что там написано можно легко узнать выполнив команду edit init.lua

    boot.lua честно говоря, вообще у себя не нашел. Есть папочка /boot/, файлы из которой последовательно запускаются в процессе загрузки оси. Может она имелась в виду.

     

    Так ты свою ОС делаешь? Держи нас в курсе, мы любим делать ставки, будет ли доведена очередная ось хотя бы до альфа-версии или закончится созданием темы "Пишу свою ОС".

    • Нравится 1

  6. Думаю, добавлением чего бы то ни было экономику в Майне не построить. Нужно не добавлять, а лишать игроков каких то возможностей. Например, создать игрокам условие невозможности существования без разделения труда, а следовательно, финансовых взаимоотношений. Ибо, пока человек может жить в пещере, он не пойдет в банк за ипотекой на жилье. Но, это только мое мнение.

    • Нравится 5

  7. Сама по себе event.listen не проверяет нажатие клавиши. Она регистрирует в системе "слушателя". Слушатель это сопоставление определенному событию некоторой функции.

    А работает это примерно так. Любая программа под OpenOS рано или поздно должна вызвать функцию event.pull, в противном случае мы получим синий экран с сообщением о том, что что-то там слишком долго не вызывалось. Мы все такое сообщение не раз видели. Так вот, эта функция event.pull ожидает системного события и, помимо прочих других полезных вещей, проверяет не назначен ли полученному событию слушатель. И если назначен, вызывает сопоставленную ему функцию-обработчик. Конкретно эта проверка выполняется функцией dispatch из модуля event:

     

     

    local function dispatch(signal, ...)
      if listeners[signal] then
        local function callbacks()
          local list = {}
          for index, listener in ipairs(listeners[signal]) do
            list[index] = listener
          end
          return list
        end
        for _, callback in ipairs(callbacks()) do
          if call(callback, signal, ...) == false then
            event.ignore(signal, callback) -- alternative method of removing a listener
          end
        end
      end
    end 

     

     

    Но лично мне механизм слушателей не нравится по одной простой причине. По завершении программы слушателя необходимо удалять из системы ибо он не удаляется автоматически с прекращением работы программы. Если программа завершилась некорректно или разработчик просто забил на развешанных слушателей, слушатели продолжат свою работу. И при повторном запуске программы одно событие будет обрабатываться дважды или трижды. И самое главное, удалить такого слушателя становится уже невозможно иначе как перегрузив компьютер.

    Поэтому я в своих программах предпочитаю использовать стандартный метод обработки событий event.pull, в конце концов его всё равно необходимо вызывать. Но это уже кому как нравится.

    • Нравится 3

  8. А как можно получить user-а, нажавшего кнопку? Например, есть кнопка "ВХОД", как при нажатии на эту кнопку в функцию-обработчик передать ник-нейм нажавшего(user)?
    Описание обработчика onClick устаревшее. В обработчик передается еще один параметр - ник пользователя, нажавшего кнопку. Просто в обработчике добавь еще один параметр: user. Должно получиться.

  9.  

     

    Было бы неплохо добавить что-то типа :isActive() для Timer и Event
     

    Я забыл упомянуть в описании, таймер имеет поле Enabled, которое принимает значение true, когда таймер работает и false в противном случае. А для события даже не представляю как это сделать. Событие ведь не приостанавливается, в отличии от таймера. Его можно только уничтожить методом Event1:destruct().

×
×
  • Создать...