Собственно стоит задача - сделать так чтобы пилот мог одновременно посылать команды в 2 разных окна.
Погуглив немного я нашёл про
coroutines, захотел проверить что это и как оно вообще работает но сходу влетел в столб. Есть вот такой код:
Код
Код
co1 = coroutine.create(
function()
for i = 1, 100 do
log(i)
coroutine.yield(co1)
end
end
)
co2 = coroutine.create(
function()
for i = 1, 100 do
log(i)
coroutine.yield(co2)
end
end
)
while true
log(1)
coroutine.resume(co1)
coroutine.resume(co2)
end
Если я этот код вызываю - в логе есть только цифра 1, которая логируется в начале основного цикла, т.е. в основном цикле проходит единственная итерация.
Если я меняю log(i) на print(i) - цифра 1 логируется в логе бесконечно (т.е. основной цикл работает нормально) но никакого лога из корутин нет в принципе. Судя по всему функция в корутине валится с ошибкой, видимо контексте корутины вообще нет доступа к функциям пилота.
На этом моменте я уже начал подозревать что coroutine мне тут не подойдёт, разве что если ставить coroutine.yeld после каждой команды, но и это скорее всего не будет работать, т.к. основная проблема в задержках - если на одном окне например функция уйдёт в задержку - я хочу чтобы пока задержка тикает в одной корутине вторая корутина работала.
Собственно отсюда вытекает вопрос: можно ли заставить корутины работать таким образом который мне нужен (как минимум - передавать поток другой функции если в текущей функции стоит задержка), или же лучше использовать какой-то другой инструмент?