相关疑难解决方法(0)

Lua协同程序甚至适用于什么?为什么这段代码不像我期望的那样工作?

我无法理解这段代码......我期待类似于线程的东西,我会得到一个输出随机的"nooo"和"yaaaay"互相穿插,因为它们都是异步打印,而是我发现主线程似乎阻止第一次调用coroutine.resume(),从而防止下一个被启动,直到第一个产生.

如果这是预期的操作协同程序,它们有什么用处,我将如何实现我希望的目标?我是否必须为这些协同程序实现我自己的调度程序才能异步操作?因为这看起来很混乱,我也可以使用函数!

co1 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("nooo")
                i = i + 1
        end
        coroutine.yield()
end)

co2 = coroutine.create(function ()
        local i = 1
        while i < 200 do
                print("yaaaay")
                i = i + 1
        end
        coroutine.yield()
end)

coroutine.resume(co1)
coroutine.resume(co2)
Run Code Online (Sandbox Code Playgroud)

lua multithreading coroutine

33
推荐指数
3
解决办法
2万
查看次数

Lua合作例程

我试图了解如何使用协同例程来"暂停"一个脚本并等待一些处理完成后再恢复.

也许我正在以错误的方式看待惯例.但我的尝试结构类似于这个答案中给出的例子.

循环loop.lua永远不会达到第二次迭代,因此永远不会达到i == 4退出C代码中的运行循环所需的条件.如果我不屈服loop.lua,则此代码按预期执行.

main.cpp中

#include <lua/lua.hpp>

bool running = true;

int lua_finish(lua_State *) {
    running = false;
    printf("lua_finish called\n");
    return 0;
}
int lua_sleep(lua_State *L) {
    printf("lua_sleep called\n");
    return lua_yield(L,0);
}

int main() {
    lua_State* L = lua_open();
    luaL_openlibs(L);

    lua_register(L, "sleep", lua_sleep);
    lua_register(L, "finish", lua_finish);

    luaL_dofile(L, "scripts/init.lua");

    lua_State* cL = lua_newthread(L);
    luaL_dofile(cL, "scripts/loop.lua");

    while (running) {
        int status;
        status = lua_resume(cL,0);
        if (status == LUA_YIELD) {
            printf("loop yielding\n");
        } else …
Run Code Online (Sandbox Code Playgroud)

c++ scripting lua coroutine

7
推荐指数
1
解决办法
4994
查看次数

标签 统计

coroutine ×2

lua ×2

c++ ×1

multithreading ×1

scripting ×1