coroutine
Підтримувані платформи:
Available since version: Gideros 2011.6
Опис:
Механізм червоточини дозволяє поділити виконання тривалої функції дрібними порціями між кроками основного циклу щоб не тормозити гру обчисленням важкої функції.
Застосування червоточини може виявитися корисним в циклічних програмах.
Наприклад, в відеоіграх працює основний цикл відтворення кадрів, між кроками якого проводиться обробка введення від користувача, моделювання та інша робота.
Оскільки оновлення кадрів гри повинна проводитися рівномірно з частотою близько 25 кадрів в секунду, то виконання тривалих обчислень між кадрами неприпустимо, тому ми ділимо їх на порції з допомогою coroutine .
У даному прикладі алгоритм функції розбитий на три кроки з поверненням управління після кожного кроку. В кожному кроці основного циклу програми проводиться продовження виконання функції, якщо вона ще не завершила роботу остаточно.
Застосування червоточини може виявитися корисним в циклічних програмах.
Наприклад, в відеоіграх працює основний цикл відтворення кадрів, між кроками якого проводиться обробка введення від користувача, моделювання та інша робота.
Оскільки оновлення кадрів гри повинна проводитися рівномірно з частотою близько 25 кадрів в секунду, то виконання тривалих обчислень між кадрами неприпустимо, тому ми ділимо їх на порції з допомогою coroutine .
У даному прикладі алгоритм функції розбитий на три кроки з поверненням управління після кожного кроку. В кожному кроці основного циклу програми проводиться продовження виконання функції, якщо вона ще не завершила роботу остаточно.
Приклади:
-- ***************************************************************************************
-- ТЯЖКА ФУНКЦІЯ ПОДІЛЕНА ЧЕРВОТОЧИНАМИfunction f(x)
local step = 1
print("Стартовий скачок червоточини= "..step.." з x = "..x)
-- ...
-- Повернення управління, проміжних результатів і очікування продовження виконання.
x = coroutine.yield(step)
step = step + 1
print(" проміжний скачок= "..step.." з x = "..x)
-- ...
-- Повернення управління, проміжних результатів і очікування продовження виконання
x = coroutine.yield(step)
step = step + 1
print("фінішний скачок= "..step.." з x = "..x)
-- ...
-- Завершення виконання і повернення результатів
return step
end
-- ***************************************************************************************
n = 5
-- створення червоточини
cr = coroutine.create(f)
-- ОСНОВНИЙ ЦИКЛ ГРИ for i=1,n do print("Основний цикл "..i)
-- Якщо червоточина активна if coroutine.status(cr) ~= "dead" then -- повертаємось чревоточиною назд і передаємо потрібні параметри b,res = coroutine.resume(cr, i) print("червоточина переміщає до основного циклу: b = ", b,", res = " ,res) end -- ...
end
Методи |
---|
coroutine.create |
coroutine.resume |
coroutine.status |
coroutine.wrap |
coroutine.yield |
Немає коментарів:
Дописати коментар