我目前正在尝试在我的一个项目中嵌入 V8。因为我使用 libev 来监听套接字和事件,并希望能够用 JS 编写事件脚本,所以我希望能够只运行 v8 一段时间,然后跳回 C++ 来检查事件等,然后返回运行 JS 代码。由于我之前没有做过多少脚本嵌入,所以我确信通常有一些聪明的方法可以完成,所以所有的想法都会受到赞赏。
最佳答案
我发现最简洁的方法是在 JS 中创建 setTimeout 和 clearTimeout 函数。 setTimeout 创建一个 ev::Timer
,它有一个在一定时间后被调用的回调。这使得当你调用一个 JS 函数时,你会继续执行它直到它返回,但是该函数可以设置一些超时,这些超时不会在你退出当前 JS 并且没有发生任何其他 libev 之后调用执行期间的事件,在这种情况下,首先处理这些事件(在 C++ 中)。这种方法的局限性在于,编写 JS 的编码人员必须记住不要编写进入永恒 while 循环或类似循环的函数。循环是这样完成的:
function repeat() { setTimeout(repeat, 0); }
关于javascript - 在 V8 中异步运行 C++ 和 JS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335710/