@alexey_abramov

Как реализовать консольную командную строку в QT используя стандартные потоки?

Здравствуйте. Делаю серверное приложение для своей маленькой игры. Мог сделать его с помощью GUI и этого вопроса небыло, но вот захотелось реализовать с помощью командной строки. Т.е. окно, в которое мы вбиваем консольные команды, и получаем ответы, но этот приложение еще разумеется работает само по себе с клиентами.
Сервер простой есть конструктор сервера, в котором мы его запускаем. Создали, соединили все с помощью сигналов-слотов, и открываем отдельный поток, который собственно говоря работает с stdin и stdout.
gserver::gserver(int nPort) : NextBlockSize(0)
{
    //создание, соединение и прочее опустил
        logadd("server ready"); // моя функция добавления в журнал(сообщений
        thread.start();
        thread.run();
   

}

В потоке примерно следующее вызывается
void ThreadIO::run()
{
    qtin = new  QTextStream(stdin);
    qtout = new  QTextStream(stdout);
    QString line;
    line = qtin->readLine();
// далее идет обработка и прочее.
}


Разумеется этот вариант - не работает нормально , т.к. работая в stdin, даже в отдельном потоке мы глушим все приложение. Поэтому, разумеется никакие запросы от клиентов, получение любых сигналов и слотов не работают здесь, и не проходят до ввода чего-либо.

Подскажите пожалуйста, как реализовать приложение такого вида. Т.е. чтобы stdin не "глушил" все. Т.е. нужно как например в gdb, и прочих других приложениях с командной строкой отдельно.
Если существует какая-то реализация не используя стандартные потоки, или что-то еще - отпишите пожалуйста, или скажите куда копать. Погуглил достаточно, и чего-то похожего не нашел. Пробывал выносить в отдельный процесс операции с stdin - получается к сожалению тоже самое.
  • Вопрос задан
  • 512 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы