DebugConsole というグローバル変数があります。Alloc Console を使用してコンソールを作成し、std::cout と std::cin をリダイレクトします。
問題は、コンソールが生成されたとき、すべてがうまくいっているということです。ただし、 std::cin.get() を使用すると、ブロックされ、アプリケーションの残りの部分はクリックできなくなります。そこで、std::cin.get() をスレッド化することにしました。キーを押すと、コンソールが正常に閉じます。ボックスのチェックを外すと問題が発生します。std::cin.get() がスレッドの移動をブロックしているため、スレッドは参加できません。したがって、応答する前に最初に入力する必要があります。これにより、アプリケーション全体がフリーズします。
任意のキーを押すとコンソールが終了するか、ボックスのチェックを外すとコンソールが閉じられるようにしようとしています。
if (ButtonChecked)
{
std::cout<<"To close this window: \nRemove the checkmark from the Extract Box OR Press Any Key..\n"<<std::flush;
DebugConsole.StartThread([window]{ //create an std::thread and run the lambda in it.
std::cin.get();
DebugConsole.StopThread(); //join the thread.
DebugConsole(false, false); //close the console.
UncheckBox(DebugBox);
});
}
else
{
DebugConsole.StopThread(); //basically just joins the thread..
UncheckBox(DebugBox);
}
問題のコードは上記です。どうすればそれを達成できますか?