Форум программистов, компьютерный форум CyberForum.ru

Асинхронный ввод с клавиатуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
13.09.2011, 17:49     Асинхронный ввод с клавиатуры #1
Доброго времени суток. Имеется клиент named pipes реализованный в консоли. Сервер время от времени шлет сообщения этому клиенту, ввод и отправка сообщений серверу от клиента тоже присутствует. Нужно сделать так, чтобы при вводе сообщения в окне клиента, клиент принимал и отображал сообщения от сервера.
В данный момент использую std::wcin.getline(буфер,sizeof(буфер)). Функция отличная, но до нажатия Enter принятые от сервера сообщения "курят" в очереди.
Не могли бы сдвинуть меня на верный путь?

Добавлено через 4 минуты
Может быть вариант с отдельным потоком для клавиатуры? Отпустит ли cin.getline меня на обработку другого потока?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 17:49     Асинхронный ввод с клавиатуры
Посмотрите здесь:

Ввод с клавиатуры C++
C++ ввод с клавиатуры
Ввод с клавиатуры C++
C++ Ввод с клавиатуры
C++ асинхронный ввод/вывод
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.09.2011, 04:13     Асинхронный ввод с клавиатуры #2
Цитата Сообщение от Mustik
Отпустит ли cin.getline меня на обработку другого потока?
получи управление консолью
win - msdn
lin - termios
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
14.09.2011, 09:43  [ТС]     Асинхронный ввод с клавиатуры #3
Цитата Сообщение от accept Посмотреть сообщение
получи управление консолью
win - msdn
lin - termios
Немного не понял. Можете по-подробнее рассказать?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.09.2011, 11:23     Асинхронный ввод с клавиатуры #4
оставление курсора
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
14.09.2011, 13:01  [ТС]     Асинхронный ввод с клавиатуры #5
Цитата Сообщение от accept Посмотреть сообщение
оставление курсора
Так, это уже хорошо. Спасибо.
Но все-равно не понятно, как реализовать параллельно ввод с клавиатуры и отображение принятого сообщения. Точнее, проблема в том, что wcin.getline адекватно работает с клавишами backspace, enter, esc, можно побегать по набранной строке курсором и удалить ненужные символы, а вот если работать с посимвольным вводом (например, _getwche()), то все возможности нужно реализовывать в ручную, что ни есть хорошо.
Еще не пробовал, как ведет себя wcin.getline в отдельном потоке, думаю, вопросов еще больше будет
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.09.2011, 01:51     Асинхронный ввод с клавиатуры #6
Цитата Сообщение от Mustik
Но все-равно не понятно, как реализовать параллельно ввод с клавиатуры и отображение принятого сообщения.
вот средства:
msdn. запись в консоль
msdn. чтение из консоли
там слева посмотришь функции управления курсором

Цитата Сообщение от Mustik
а вот если работать с посимвольным вводом (например, _getwche())
для начала нужно попробовать просто одновременный ввод и вывод
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
15.09.2011, 10:40  [ТС]     Асинхронный ввод с клавиатуры #7
Спасибо, мысли хорошая. Хреновато умею пользоваться поиском MSDN
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.09.2011, 10:48     Асинхронный ввод с клавиатуры #8
Цитата Сообщение от Mustik
Хреновато умею пользоваться поиском MSDN
там у них организация навроде реестра уиндоус
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
20.09.2011, 17:34  [ТС]     Асинхронный ввод с клавиатуры #9
Цитата Сообщение от accept Посмотреть сообщение
для начала нужно попробовать просто одновременный ввод и вывод
Не могли бы по-подробнее на эту тему? что вы имеете ввиду?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.09.2011, 06:06     Асинхронный ввод с клавиатуры #10
Цитата Сообщение от Mustik
Не могли бы по-подробнее на эту тему? что вы имеете ввиду?
в одну область выводятся сообщения, которые приходят
в другую область выводятся набираемые символы
переход между областями через gotoxy()
для каждой области делается отдельный поток
происходит переключение между потоками
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
21.09.2011, 14:23  [ТС]     Асинхронный ввод с клавиатуры #11
Как очистить определенную строку в консоли?

Добавлено через 1 час 31 минуту
Цитата Сообщение от Mustik Посмотреть сообщение
Как очистить определенную строку в консоли?
Очистить получилось.

Теперь проблема, как прочитать определенную строку из консоли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 10:59     Асинхронный ввод с клавиатуры
Еще ссылки по теме:

Как правильно заменить ввод данных простой на ввод с клавиатуры? C++
Ввод с клавиатуры в массив C++
Ввод с клавиатуры C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
23.09.2011, 10:59  [ТС]     Асинхронный ввод с клавиатуры #12
Так, у меня все получилось. ReadConsole работает кривовато, когда начинаешь вырезать строку, которую вводишь, и вставлять в другое место. Если начинаю вырезать, вставлять пустую строку, захватывает откуда-то с консоли хрень ввиде двух символов. Пришлось вернуться к своим std::wcin.getline(...,...).
А теперь возникла проблема, если я дохожу до последней строки консоли и продолжаю дальше принимать строки, то начинаются глюки. Получается, что мне нужно удлиннить консоль. Можно ли так сделать? Или удалять первые строки нужно?
Yandex
Объявления
23.09.2011, 10:59     Асинхронный ввод с клавиатуры
Ответ Создать тему

Метки
msdn, консоль
Опции темы

Текущее время: 13:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru