0

我有一个 c++ 库,其中包含一个实现自定义编程语言的虚拟机(称为“VM”)的类。这种语言有一些可以执行的不同指令,其中有“从输入读取值”指令。VM 可以以两种模式运行:逐步执行单个指令(直到机器完成)或一次执行所有指令。它还可以用于两个应用程序:控制台和 GUI 应用程序。

到目前为止,我只有一个控制台应用程序。当执行“从输入读取值”指令时,它只是使用 std::cin 读取值,所以虚拟机停止,直到输入被提交。当我尝试为 VM 创建 GUI 时会出现问题。我将使用典型的文本输入而不是std::cin.

问题是:您认为从执行指令的角度对此类问题进行建模的最佳方法是什么?执行“从输入中读取值”指令时,VM 应该如何表现?用户在点击“执行单条指令”之前不知道会是什么指令,所以在指令执行之前不能提交输入。

我正在考虑向 VM 添加一个新的状态属性:{working|awaiting_input}. 在“读取”指令运行时,机器应该挂起直到它得到输入。当 GUI 层从用户那里获取输入时,它会调用 VM 的passInput(inputValue)新方法,该方法另外唤醒 VM(以完成单个指令或全部指令)。你能想出一个更简单的解决方案(例如,不添加 state 属性)吗?

4

1 回答 1

2

第一步是将您的“输入”从作为 VM 引擎的一个组成部分 [听起来像现在这样],这样当您获得“从输入中读取的值”时,您只需调用“do_input” function - 在“user_interface”类中实现的虚函数 - 可以是 UI 或 iostream。

无论是单停运行还是“全速”运行都应该没有任何区别,“指令”在输入收集之前不会完成,对吧?

现在,GUI 可能相当棘手,因为它往往是事件驱动的,而输入只是另一个事件。但是,如果您将“do_input”函数实现为仅在读取输入时返回的函数,那么这并不是什么大不了的事。您只需要一些(a 的一部分)窗口作为“这是您输入输入的地方”,并且用户必须为此输入一些内容。当用户点击回车(或单击按钮等)时,您就完成了输入。

您可能还希望有一种从文件中读取输入的模式... ;)

它可能比我刚刚描述的要复杂一些,但不应该比这更多。[我之前在指令模拟器中做过类似的事情,一条指令可以有效地花费“无限”时间,因为它等待输入]。

于 2013-01-31T12:10:39.557 回答