Название: Как реализовать консольную командную строку в QT используя стандартные потоки ? Отправлено: paravoz1k от Август 04, 2015, 20:35 Здравствуйте. Делаю серверное приложение для своей маленькой игры. Мог сделать его с помощью 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 - получается к сожалению тоже самое. Название: Re: Как реализовать консольную командную строку в QT используя стандартные потоки ? Отправлено: Kurles от Август 05, 2015, 18:55 C чего это мы глушим приложение, работая с stdin в отдельном потоке?
Код
|