В графическом приложении я выполняю команды отладки, используя ввод консоли. Когда создается консоль, также создается новый поток для сбора пользовательских команд, обрабатывающих весь этот ввод, графическое приложение продолжает работать параллельно. Я использую библиотеку boost :: thread.
Пока это работает хорошо, однако я не нашел хорошего решения, чтобы остановить выполнение этого потока. Поток всегда ожидает ввода пользователя:
while(appRunning)
{
std::cin>>theUserCommand;
// ...do stuff
}
Затем, когда графическое приложение завершится, оно остановит все консольные функции, в которые я включаю поток:
appRunning = false;
// do some more related clean up
myListeningThread->join();
Как вы можете видеть, std :: cin будет ждать пользовательский ввод после вызова соединения. Одно из решений, которые я пробовал, - создать события, «синтезирующие нажатия клавиш», std :: cin получит любое значение, которое вы отправите с помощью ENTER, поток завершится красиво, это ужасное решение, и я не хочу его оставлять. Кроме того, он работал в одной из сред, в которой выполняется инструмент, но терпит неудачу, когда я пытался использовать его вместе с UI API.Не могли бы вы подсказать, как я могу это исправить? Не могу точно сказать, есть ли в документации C ++ функция, чтобы остановить std :: cin, ожидая ввода пользователя, и просто и продолжить выполнение программы, возможно ли это вообще?
EDIT: Хорошо, я считаю, что keybd_event немного вводит в заблуждение для некоторых сред, явное указание обработчика ввода с помощью WriteConsoleInput работает хорошо.