Можно ли остановить cin от ожидания ввода?

В графическом приложении я выполняю команды отладки, используя ввод консоли. Когда создается консоль, также создается новый поток для сбора пользовательских команд, обрабатывающих весь этот ввод, графическое приложение продолжает работать параллельно. Я использую библиотеку 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 работает хорошо.

9
задан notNullGothik 19 December 2011 в 13:54
поделиться