Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191

Очистка потока _getch()

19.06.2015, 20:58. Показов 4823. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сетевая прога. getch() считывает клавишу пользователя, делает действие и переключается в состояние listening. И пока он слушает, не пришел ли ответ сервера, можно сколь угодно брякать по клавиатуре и забивать поток. И когда вновь приходит черед пользователя жать клавиатуре, getch схватывает символ, введенный по неосторожности во время listening-a. Этого нужно избежать.

Пробовал всякие cin.sync(), cin.ignore(), но они не работают, видимо потоки разные. Как очистить поток getch не нашел. Как его отчистить, чтобы прога всегда ждала ввода пользователя?

Либо нужна функция объекта cin, которая не требует нажатия энтера.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2015, 20:58
Ответы с готовыми решениями:

Очистка потока
Так получается в программе, что приходится несколько раз открывать файл и закрывать, в ходе этого при очередном открытии файла в котором...

Очистка потока
Приветствую! Есть метод класса, принимающий имя сотрудника (объект класса string) и его номер: void Employee::setData() { ...

Аналог getch или русские буквы в getch
Здравствуйте, уважаемые господа. Существуют ли какие-нибудь аналоги getch () и _getch, которые не требуют ввода какого-либо другого...

6
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
19.06.2015, 21:46
Среда какая?
0
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
19.06.2015, 23:26  [ТС]
Visual Studio 2013
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
20.06.2015, 00:19
Вопрос туманен. Непонятно откуда у тебя getch() что-то схватывает после ожидания, он же не из буфера читает.
Цитата Сообщение от Defake Посмотреть сообщение
Как очистить поток getch не нашел.
Это вообще не поток.
Нужен какой-то пример, по которому можно будет понять в чём там дело и что можно сделать.

Добавлено через 1 минуту
Цитата Сообщение от Defake Посмотреть сообщение
Либо нужна функция объекта cin, которая не требует нажатия энтера.
Тут, в отличие от getch(), без enter не обойтись.

Добавлено через 12 минут
Цитата Сообщение от Defake Посмотреть сообщение
Пробовал всякие cin.sync(), cin.ignore(), но они не работают, видимо потоки разные.
Это методы для очистки буфера ввода, а getch() буфер не использует, поэтому и не работает.
Мне кажется, тут имеет место быть не очередь в буфере ввода, а очередь событий. Но это только предположение, с состоянием listening не знаком.
0
 Аватар для Defake
5 / 5 / 0
Регистрация: 24.08.2011
Сообщений: 191
20.06.2015, 00:42  [ТС]
lss, ну, примерно так:

C++
1
2
3
4
5
6
while ((bytesReceiving = recv(*(currentPlayer->GetSocket()), buff, REPORT_SIZE, NULL))) {
кодкодкод
char key = _getch();
делаем что-то в зависимости от клавиши
кодкодкод
}
Работаю с сокетами. То есть в функции считывается клавиша, в зависимости от нее делаются какие-то действия, потом отправляется пакет. И функция возвращается к строчке while(recv()) и висит там, пока ответ не придет. Если во время того, как функция "висит" нажимались клавиши, то когда ответ придет _getch() словит те клавиши, которые были нажаты в это время. Я предположил, что это некий поток..

Добавлено через 1 минуту
Если это события, то как их отловить и отменить?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
20.06.2015, 04:02
Цитата Сообщение от Defake Посмотреть сообщение
Работаю с сокетами.
Сторонняя библиотека или Win32 API?

Добавлено через 3 часа 12 минут
Цитата Сообщение от Defake Посмотреть сообщение
И функция возвращается к строчке while(recv()) и висит там, пока ответ не придет. Если во время того, как функция "висит" нажимались клавиши, то когда ответ придет _getch() словит те клавиши, которые были нажаты в это время.
Такое поведение программы намекает на то, что эту функцию нужно поместить в отдельный поток.
Цитата Сообщение от Defake Посмотреть сообщение
Если это события, то как их отловить и отменить?
Вопрос не по С++.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.06.2015, 14:10
Цитата Сообщение от lss Посмотреть сообщение
что эту функцию нужно поместить в отдельный поток
Или (что обычно лучше) использовать async i/o.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2015, 14:10
Помогаю со студенческими работами здесь

Очистка потока ввода
ПОМОГИТЕ НАЙТИ ОШИБКУ Ребят написал малюсенький фрагмент кода, но уже есть ошибка. после того как вводим сh, почему то нельзя ввести...

Очистка потока ввода
Собственно тема подымалась в интернете, но внятного объяснения я не получил. Для ввода строки с пробелами использую cin.getline() Если...

Очистка буфера потока
И снова здравствуйте, возникла снова проблема теперь уже иного рода. Есть код который заносит в поток значение: strm <<...

Телефонный справочник. Очистка потока ввода
Доброго времени суток!!! Нужно сделать подобие телефонного справочника! Вот мой код: # include <iostream> # include...

Класс Person. Очистка потока ввода
Добрый вечер помогите найти ошибку в проге: задание : Разработайте класс Person, который содержит соответствующие элементы для...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru