Название: Вопрос по консольной программе(не решено) Отправлено: Примерный ученик от Март 18, 2011, 16:04 QT3.3.8
Консольная программа без цикла событий. В цикле выполняются некие действия... Завершаться должна при вводе команды Код: exit Как быть? ??? Название: Re: Вопрос по консольной программе Отправлено: Примерный ученик от Март 18, 2011, 16:14 Уточняю вопрос:
можно ли узнать, что в stdin появилась информация? Чтобы только тогда вызвать Код: streamIN.readLine(); Название: Re: Вопрос по консольной программе Отправлено: Fess от Март 18, 2011, 18:55 ИМХО, лучше выделить полезный рабочий код в отдельный поток, к интерфейс к нему (пусть консольный - это будет уже не важно) управляет процессом как ему нужно.
Название: Re: Вопрос по консольной программе Отправлено: Примерный ученик от Март 18, 2011, 20:17 В stdout выводится результат работы...
Если сделать отдельный поток - те же проблемы будут... Мне просто надо знать, когда во входном потоке появляется команда и ее прочитать ??? Название: Re: Вопрос по консольной программе Отправлено: brankovic от Март 18, 2011, 21:28 QT3.3.8 Консольная программа без цикла событий. В цикле выполняются некие действия... Завершаться должна при вводе команды Код: exit Как быть? ??? Странно поставлена задача. Если завершаться должна после вычислений, то может сначала посчитать, вывести результат, а потом читать stdin? Или принципиально важно остановить по команде exit? Название: Re: Вопрос по консольной программе Отправлено: Примерный ученик от Март 19, 2011, 10:50 Ничего странного...
В цикле выполняется длительная работа с выдачей результата в stdout... Завершение работы или после выполнения всего задания или по команде оператора. Вот и хочу узнать: был ли ввод в stdin >:( Название: Re: Вопрос по консольной программе Отправлено: Примерный ученик от Март 19, 2011, 11:11 В общем, все очень просто
Код: QFile in; Код: if (!in.atEnd()) Название: Re: Вопрос по консольной программе(не решено) Отправлено: Примерный ученик от Март 19, 2011, 11:40 Не прокатывет...
Всегда не конец файла ??? Точнее при вызове Код: (in.atEnd()) Название: Re: Вопрос по консольной программе(не решено) Отправлено: m_ax от Март 19, 2011, 12:54 Может проще сделать как-то так:
Код Или опишите проблему более детально, а то так очень смутно представляется что вы хотите.. Я сейчас тож пишу одно консольное приложение просто.. Название: Re: Вопрос по консольной программе(не решено) Отправлено: Примерный ученик от Март 19, 2011, 13:15 m_ax
В цикле идет опрос серверов и в stdout выводится информация об опросе. Заканчивается работа по команде с консоли exit. Проблема в том, что команда readln переводит приложение в режим ожидания и прекращает работу основной функции :-[ Название: Re: Вопрос по консольной программе(не решено) Отправлено: m_ax от Март 19, 2011, 13:39 m_ax Фактически моя задача очень похожа на вашу. У меня есть ядро, которое занимается вычислениями (очень долгими и нудными), но я могу с консоли не прирывая вычисления вводить команды, например, для вывода статуса, остановки вычислений, перезапуска и ещё кучу всяких команд. В цикле идет опрос серверов и в stdout выводится информация об опросе. Заканчивается работа по команде с консоли exit. Проблема в том, что команда readln переводит приложение в режим ожидания и прекращает работу основной функции :-[ Ядро просто запускается в отдельном потоке, тогда readln не буде блокировать ядро. Могу показать исходники самого механизма, реализующего само консольное приложения и механизм общения через консоль с объектами. Название: Re: Вопрос по консольной программе(не решено) Отправлено: Igors от Март 19, 2011, 14:11 На Линуксе я работал "аж несколько раз" поэтому возможно вариант ниже наивен. Как я понял, надо узнать нажата ли клавиша не входя в ожидание. Я делал так
Код
Название: Re: Вопрос по консольной программе(не решено) Отправлено: Примерный ученик от Март 19, 2011, 14:13 m_ax
Спасибо. Я не хочу создавать еще один поток. Этот поток и сам в конечном итоге будет управляться извне (идет отладка)... Применю в качестве команды на окончание просто убиение потока (он грузится через QProcess и ничего никуда, кроме stdout не пишет) |