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

Оъясните как работает консольный буфер ввода - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
QWAN
56 / 55 / 1
Регистрация: 02.09.2008
Сообщений: 181
11.02.2010, 18:57     Оъясните как работает консольный буфер ввода #1
Windows поддерживает "очередь сообщений" для каждой программы, работающей в данный момент в системе Windows (значит и для консоли). Когда происходит ввод информации, Windows преобразует ее в "сообщение", которое помещается в очередь сообщений программы (я так понимаю в интересующий меня буфер консоли). Если я использую функцию ReadConsoleInput - читает данные из консольного буфера ввода и удаляет их из буфера, то вроде все ясно (она прочитала данные из буфера, записала их в массивструктур INPUT_RECORD и очистила буфер консоли) но к сожалению эта функция не возвращает значения до тех пор, пока, по крайней мере, не будет прочитана одна запись вводимых данных.
Если использовать
функцию PeekConsoleInput - читает данные из заданного консольного буфера ввода без удаления их из буфера. То возникает вопрос, нужно ли чистить буфер консоли и если чистить то как это организовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2010, 18:57     Оъясните как работает консольный буфер ввода
Посмотрите здесь:

C++ Как можно бы создать метод для ввода размерности (т.е. для ввода private переменных n,m)?
Не работает функция ввода массива C++
Не работает одно исключение ввода C++
Не работает программа проверки ввода цифр C++
Не работает gets (программа игнорирует операцию ввода) C++
Перевод потока из файлового ввода/вывода в консольный ввод/вывод C++
Как работает метод get и putback (Подсчитать количество символов ввода вплоть до значения '$') C++
String как буфер C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
QWAN
56 / 55 / 1
Регистрация: 02.09.2008
Сообщений: 181
15.02.2010, 10:02  [ТС]     Оъясните как работает консольный буфер ввода #2
Тема закрыта.
Консольный буфер чистить нужно!
Низкоуровневые функции обеспечивают прямой доступ к буферу вводимых данных, в отличие от высокоуровневых функций, которые фильтруют и обрабатывают информацию буфера вводимых данных, сбрасывая все, кроме ввода информации с клавиатуры
.
Поэтому, если я использовал низкоуровневую функцию PeekConsoleInput , я должен после нее очистить буфер. В своем приложении я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Функция PeekConsoleInput читает данные из заданного консольного буфера ввода без удаления их из буфера
        if(!PeekConsoleInput(hStdin,    // дескриптор буфера ввода
                            pBuffer,    // буфер, в котором читаем
                            128,        // размер буфера чтения
                            &cNumRead))    // дескриптор буфера ввода
        {
            MessageBox(NULL, "ReadConsoleInput", "Console Error", MB_OK); 
            return 0;
        }//if(!PeekConsoleInput
        if(cNumRead)//Если PeekConsoleInput скопировал хоть что-то из буфера ввода то очищаем его
        {
            if(!FlushConsoleInputBuffer(hStdin)) //Очистка буфера
            {
                MessageBox(NULL, "FlushConsoleInputBuffer", "Console Error", MB_OK);
                return 0;
            }
        }//if(cNumRead)
Хотя, использовать функцию ReadConsoleInputв своем приложении я тоже мог. Для того чтобы программа не ожидала (зависала пока нет сообщения) можно было бы сначала проверить есть ли сообщения в буфере с помощью функции GetNumberOfConsoleInputEvents - выясняет число непрочитанных записей вводимых данных в буфере ввода. И если что то есть запустить ReadConsoleInput.
Yandex
Объявления
15.02.2010, 10:02     Оъясните как работает консольный буфер ввода
Ответ Создать тему
Опции темы

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