2019-08-15 13:26:52 +08:00
|
|
|
#define SOL_ALL_SAFTIES_ON 1
|
|
|
|
#include <sol/sol.hpp>
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
const auto& co_lua_script = R"(
|
|
|
|
function loop()
|
|
|
|
while counter ~= 30
|
|
|
|
do
|
|
|
|
coroutine.yield(counter);
|
|
|
|
counter = counter + 1;
|
|
|
|
end
|
|
|
|
return counter
|
|
|
|
end
|
|
|
|
)";
|
|
|
|
|
|
|
|
sol::state lua;
|
|
|
|
lua.open_libraries(sol::lib::base, sol::lib::coroutine);
|
|
|
|
/*
|
|
|
|
lua.script_file("co.lua");
|
|
|
|
we load string directly rather than use a file
|
|
|
|
*/
|
|
|
|
lua.script(co_lua_script);
|
|
|
|
sol::thread runner = sol::thread::create(lua.lua_state());
|
|
|
|
sol::state_view runnerstate = runner.state();
|
2020-03-23 08:29:23 +08:00
|
|
|
sol::coroutine loop_coroutine = runnerstate["loop"];
|
2019-08-15 13:26:52 +08:00
|
|
|
lua["counter"] = 20;
|
|
|
|
|
|
|
|
for (int counter = 0; counter < 10 && loop_coroutine; ++counter) {
|
|
|
|
// Call the coroutine, does the computation and then suspends
|
|
|
|
int value = loop_coroutine();
|
2019-08-16 12:34:25 +08:00
|
|
|
std::cout << "value is " << value << std::endl;
|
2019-08-15 13:26:52 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|