グラフィカルアプリケーションでは、コンソール入力を使用してデバッグコマンドを実行します。コンソールが作成されると、そのすべての入力を処理するユーザーコマンドを収集するための新しいスレッドも作成され、グラフィカルアプリケーションは並行して実行され続けます。 boost :: threadライブラリを使用します。cinが入力を待つのを止めることができますか?
これまではうまくいきましたが、このスレッドの実行を停止する良い解決策は見つかりませんでした。スレッドは、常にユーザーの入力を待っている:
while(appRunning)
{
std::cin>>theUserCommand;
// ...do stuff
}
グラフィカルアプリケーションが終了したときに続いて、それはすべてのコンソール機能を停止します、私はスレッドが含まれている:あなたが見ることができるように
appRunning = false;
// do some more related clean up
myListeningThread->join();
を結合が呼び出された後、std :: cinはユーザー入力を待つことになります。 私が試した解決策の1つは、「キー入力を合成する」というイベントを作成することです.STD :: CinはENTERで送信する値を取得し、スレッドはうまく終了します。このソリューションは恐ろしいものであり、保持したくありません。 さらに、ツールが実行される環境の1つで動作しましたが、UI APIと共に使用すると失敗します。あなたは私が正しい方法でこれを修正する方法を教えてくれますか?実際にC++のドキュメントにstd :: cinがユーザー入力を待っているのを止め、プログラムの実行を続行する機能があるのかどうかは確かに言えませんが、それは可能ですか?
編集:私は、keybd_eventは、WriteConsoleInputで入力ハンドラを明示的に指定すると、いくつかの環境で誤解を招くことがあります。
複数の可能性がありますが、すべてがOSに依存します。このプログラムはどのオペレーティングシステム用ですか? – zwol
Win/VStudio9.0、上記のソリューションでkeybd_eventを使用しましたが、OSに依存する場合は問題ありません。それを修正するために私にどのようにお勧めしますか? – notNullGothik
ところで、SetConsoleCtrlHandlerは本当に私にとってはうまくいきません。これは、アプリケーションの処理を終了し、アプリケーションのクリーンアップをすべてスキップします。 – notNullGothik