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