Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2015, 20:32   #1
paravoz1k
Пользователь
 
Аватар для paravoz1k
 
Регистрация: 26.03.2010
Сообщений: 78
По умолчанию Как реализовать консольную командную строку в QT используя стандартные потоки IO?

Здравствуйте. Делаю серверное приложение для своей маленькой игры. Мог сделать его с помощью 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 - получается к сожалению тоже самое.
Начинающий кодер Delphi + PHP
paravoz1k вне форума Ответить с цитированием
Старый 04.08.2015, 22:58   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Сделайте во втором потоке сигнал с ожиданием ответа (тип подключения Qt::BlockingQueuedConnection), который будет подключен к слоту основного потока, который и будет взаимодействовать с stdin и stdout.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запустить командную строку в VS 6? kuhacl Visual C++ 2 12.03.2012 02:06
создать ярлык приложения, используя командную строку innae Операционные системы общие вопросы 0 12.02.2012 16:59
как запустить командную строку mysql ilushka2306 PHP 7 11.04.2011 00:28
Как вызвать из модуля формы командную строку Swatch Microsoft Office Access 1 26.11.2010 12:08
Как вызвать командную строку с командой из Edit?? dolphin705 Общие вопросы Delphi 2 20.06.2009 00:33