emscripten 阻塞和恢复 main()

问题描述 投票:0回答:0

我试图基本上模仿 Wasm 模块中的

cin
功能,从 `.

中获取用户的输入

我正在解决定义

extern "C" function
的问题,然后我将使用
--js-library
标志从JS导入我的c ++代码。

我确实设法从

<input>
获得用户的输入,但我真正无法实现的是让 c++ 程序等待用户输入一个值。

另一个提示来自这个项目。在src/Main_Maze.cpp中作者实现了获取用户的输入并退出主函数使用:

LOOP_SPEED = 60;
INF_LOOP = true;
void main(){
    /* CODE */
    emscripten_set_main_loop(start_prompt, LOOP_SPEED, INF_LOOP);
    ...
}

据我所知

start_prompt()
被加载到主线程中,它会一直运行直到用户输入一个值。

void start_prompt(void) {

    int start_bool = 0;
    // Inline JS - Get the value entered into the faux CLI
    start_bool = EM_ASM_INT({
        return input;
    }, start_bool);

    // Select 1 to start
    if (start_bool == 1) {
        /* CODE */
        emscripten_cancel_main_loop();
        emscripten_set_main_loop(start_room, LOOP_SPEED, INF_LOOP);
    }
}

当用户输入 1 时,函数调用

emscripten_cancel_main_loop()
并召回
emscripten_set_main_loop(start_room, LOOP_SPEED, INF_LOOP)
进入另一个功能。

现在我的问题是:

如何暂停/退出

main()
功能,等待用户输入并恢复
main()

查看emscripten文档,我可以看到有很多功能可以同步阻塞或暂停主线程的执行,例如:

emscripten_push_uncounted_main_loop_blocker(...)
emscripten_pause_main_loop()

但没有任何效果。你能给我举个例子吗? 请告诉我是否应该发布我的代码。

谢谢

c++ webassembly emscripten emcc
© www.soinside.com 2019 - 2024. All rights reserved.