Ценою неимоверных усилий удалось портировать уже известную вам библиотеку thread в ОС.
Библиотека доступна для скачивания по команде
Установка: pastebin get E0SzJcCx /lib/thread.lua [код]
По сравнению с версией для СС, библиотека имеет еще две функции, вызываемых без параметров:
thread.init() - инициализирует многозадачный режим. Должна вызываться один раз перед вызовом других функций библиотеки.
thread.waitForAll() - ожидает завершения всех дочерних потоков. В отличии от СС-версии, дочерние потоки прерываются при завершении родительского. Поэтому, waitForAll следует вызывать в конце основной программы, чтобы дать возможность дочерним завершиться корректно.
Функции create, kill и killAll работают аналогично версии для СС.
thread.create(f , ...) - создает поток, который сразу же начинает выполняться параллельно основному потоку. При желании можно создать серию потоков, вызвав функцию create несколько раз подряд. В качестве параметра f необходимо указать функцию, содержащую тело потока. После f можно указать параметры, передаваемые ей.
Функция create возвращает вновь созданный поток как объект типа нить ("thread"). Значение это может понадобиться если вы захотите прервать принудительно созданный поток.
thread.kill(co) - прерывает выполнение параллельного потока. co - завершаемый поток, значение, полученное при вызове функции create.
thread.killAll() - прекращает выполнение всех параллельных потоков, за исключением основного.
Пример работы с библиотекой:
local thread = require("thread")
-- Инициализируем многозадачность
thread.init()
-- Функция, которая выводит строку str несколько раз с интервалом секунда
function foo(str,n)
for i=1,n do
print(str)
os.sleep(1)
end
end
-- Запускаем два экземпляра функции с разными параметрами
thread.create(foo,"AAA",5)
thread.create(foo,"BBB",7)
-- Ждем завершения
thread.waitForAll()
Результат работы программы