Здравствуйте. Делаю серверное приложение для своей маленькой игры. Мог сделать его с помощью 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 - получается к сожалению тоже самое.