目前我正在做一个案例研究,将 IronRuby 集成到我们的一个核心产品中。脚本的执行只能以同步方式执行,因此我计划在每个线程中执行脚本。
但另外我需要对脚本执行进行更多控制,尤其是。我需要一种方法来暂停脚本并在稍后的时间点恢复它。我想我需要存储一个堆栈帧,包括。脚本暂停时的所有变量,我称之为“运行时上下文”。唉,我没有找到以所需方式“监视”脚本执行的方法。(我通过动态对象使用对宿主语言的回调进行了检查,但这种技术不提供所需的上下文。)
有没有人知道如何解决这个问题?
目前我正在做一个案例研究,将 IronRuby 集成到我们的一个核心产品中。脚本的执行只能以同步方式执行,因此我计划在每个线程中执行脚本。
但另外我需要对脚本执行进行更多控制,尤其是。我需要一种方法来暂停脚本并在稍后的时间点恢复它。我想我需要存储一个堆栈帧,包括。脚本暂停时的所有变量,我称之为“运行时上下文”。唉,我没有找到以所需方式“监视”脚本执行的方法。(我通过动态对象使用对宿主语言的回调进行了检查,但这种技术不提供所需的上下文。)
有没有人知道如何解决这个问题?
您可能会使用 DLR 的跟踪 API,该 API 通常用于实现调试器,但没有很好的文档记录。您基本上只是将脚本“分解”到调试器中,然后再继续执行。这里有一些信息,但有点过时了。
或者(可能更安全,取决于您的脚本正在做什么),您的脚本可以在定义的点返回给主机。在 Python 中,我会使用生成器;我不确定 Ruby,但即使让主机提供脚本可以调用的 yield() 函数也应该足够了。