Compilers クラスにコンパイラを実装しています。Qt と C++ を使用しています。
ソース コードからマシン コードを生成したら、コードを実行する仮想マシンを実行します。
ここで問題に直面しています。readyRead()
信号を使用して仮想マシンから出力を取得していますが、仮想マシンがユーザーからデータを読み取ろうとしていることをどのように知ることができますか?
マシンが入力を求めるたびに、ユーザーに入力ダイアログを表示したい。
実際には、プロセスの入力ストリームは、実際のユーザー入力である必要がないように設計されています。たとえば、ファイルをアプリケーションの入力にリダイレクトする場合、入力の次の部分を求める人は誰もいません。この場合、 std::cin >> a を呼び出すと、アプリケーションまたはオペレーティング システムによって生成されるシグナルはなく、QProcess には、子アプリケーションが入力を待機していることを知る方法がありません。
私の提案は、匿名パイプのような単純な IPC を使用して、そのようなイベントについて親プロセスに通知することです。可能であれば、子プロセスの標準出力で特定のマークアップを使用して、そのような通知を送信できます。
実行している仮想マシンがサードパーティのアプリケーションである場合、その出力を解析して何かを検索し、入力が必要であることをユーザーに通知することが唯一のオプションだと思います。