カスタムプログラミング言語の仮想マシン(「VM」と呼ばれる)を実装するクラスを備えたc++ライブラリがあります。この言語には、実行可能ないくつかの異なる命令があり、その中には「入力から値を読み取る」命令があります。VMは、2つのモードで実行できます。1つの命令を段階的に実行するか(マシンが完了するまで)、すべての命令を一度に実行します。コンソールとGUIアプリケーションの2つのアプリケーションでも使用できます。
今まで私はコンソールアプリケーションしか持っていませんでした。「入力から値を読み取る」命令が実行されると、std :: cinを使用して値が読み取られたため、仮想マシンは入力が送信されるまで停止しました。この問題は、VMのGUIを作成しようとすると発生します。の代わりに、一般的なテキスト入力を使用しますstd::cin
。
問題は、命令を実行するという観点から、そのような問題をモデル化するための最良の方法は何だと思いますか?「入力から値を読み取る」命令が実行されたとき、VMはどのように動作する必要がありますか?ユーザーが「単一命令の実行」をクリックする前に、それがどのような命令になるかわからないため、命令が実行される前に入力を送信することはできません。
VMに新しい状態プロパティを追加することを考えていました{working|awaiting_input}
。「読み取り」命令の実行中、マシンは入力を取得するまで一時停止する必要があります。また、GUIレイヤーがユーザーからの入力をフェッチすると、VMのpassInput(inputValue)
新しいメソッドが呼び出され、VMがさらにウェイクアップします(単一の命令またはすべての命令を終了するため)。より簡単な解決策を考えられますか(たとえば、状態プロパティを追加しないで)?